Take the 2-minute tour ×
Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

By definition, the interior point is a point inside an arbitrary region like this:

enter image description here

In picture above, $y$ is an interior point of region. My question is how to find the distance of an interior point from it's boundary?

I have this Idea: By using the polygons, we can approximate the perimeter of region by a n-gon (n is large enough). Then by saving the coordinates of perimeter in two vectors, say $x$ and $y$, and use Nearest command we can find nearest point of perimeter from interior point ($y$).

I created data matrices (find from here) in MATLAB and import to Mathematica.

imp = Import["PI.mat", "LabeledData"];
X = "KP" /. imp;
Y = "KI" /. imp;

But I can't know how to use Nearest command when we have large vectors like X and Y :

Nearest[{Flatten@X, Flatten@Y}, {3, 1.5}]

An error appears, because Flatten@X, Flatten@Y and {3, 1.5} are not the same length.

share|improve this question
2  
Not bad idea, not sure exactly what is in X Y but maybe you want: Nearest[Transpose@{X, Y}, {1.5, 3}]? –  Kuba Feb 3 at 8:22
    
@Kuba X` and Y are two simple vectors. I used that, but not sure it's correct. But what does it (Transpose) do? –  user2667048 Feb 3 at 8:32
add comment

2 Answers 2

up vote 3 down vote accepted

Assuming I interpreted your data correctly...

imp = Import["C:\\Users\\Rasher\\Downloads\\" <> "PI.mat", "LabeledData"];

(* get data into flat lists *)
X = "KP" /. imp // Flatten;
Y = "KI" /. imp // Flatten;

(* turn into X,Y point-sets *)
pts = Transpose[{X, Y}];

(* Find some point to boundary of poly *)
Nearest[pts, {3, 1.5}]

(*  {{2.67062, 2.7767}}   *)
share|improve this answer
    
Sorry I made a mistake. Please correct {1.5,3} to {3,1.5}. ({1.5,3} is not interior point) Thanks for detailed answer. –  user2667048 Feb 3 at 8:40
    
I think it is not sufficient to compute the distance to the nearest point since the nearest line may be considerably closer. –  Mr.Wizard Feb 3 at 9:08
    
@user2667048:done –  rasher Feb 3 at 9:09
    
@Mr.Wizard Can you give an example? –  user2667048 Feb 3 at 9:11
1  
@Mr.Wizard: No, you're interpreting it right, I read the question as the OP wants the nearest point contained in the point-set. If in fact the OP means the nearest point of the connected polygon described by the point-set, my answer is not want they want (hence my caveat re: interpretation), and I'll delete it. –  rasher Feb 3 at 9:38
show 7 more comments

You can compute the distance to all points within the shape in a single pass using DistanceTransform. I was unable to load your data file in Mathematica 7 so I will use an arbitrary shape as an example:

bsf = BSplineFunction[{{0, 0}, {1, 0}, {2, .5}, {1, 1}, {0, 1}}, SplineClosed -> True];

pts = Table[bsf[x], {x, 0, 1, 0.01}];

gr =
 Graphics[{White, Polygon[pts]},
  Background -> Black,
  ImageMargins -> 0,
  PlotRangePadding -> 0,
  ImageSize -> 500
 ]

dist = ImageData @ DistanceTransform[gr];

dist // MatrixPlot

enter image description here

enter image description here

Obviously extracting the correct value(s) will take some scaling, but I don't have time at the moment to work it out. Look at Rescale however.

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.