PDA

View Full Version : سوال: آیا نقطه داخل چندضلعی است؟



cardano7
یک شنبه 09 آبان 1389, 02:26 صبح
سلام
فرض کنید که یک چندضلعی داریم که گوشه های اون مشخص شده. یعنی x , y تمام گوشه ها رو داریم. سوال من این هست که چگونه بفهمیم که یک نقطه مانند P داخل این چندضلعی هست یا خارج آن.

آیا کتابخانه های #C کمکی به ما می کنند؟
یا اگر نمی کنند، چه الگوریتمی برای این کار پیشنهاد می شود؟
اگر روشی معرفی می کنید، لطفا این رو هم عنوان کنید که آیا این روش برای چندضلعی های غیرمحدب هم کار می کنند یا خیر.

با سپاس

cardano7
یک شنبه 09 آبان 1389, 09:52 صبح
ممنون از سیل بی شمار جواب ها!
یک سرچی زدم تو اینترنت و راهش رو پیدا کردم:

bool PointInPolygon(Point p, Point[] poly)
{
Point p1, p2;
bool inside = false;
if (poly.Length < 3)
{
return inside;
}
Point oldPoint = new Point(
poly[poly.Length - 1].X, poly[poly.Length - 1].Y);
for (int i = 0; i < poly.Length; i++)
{
Point newPoint = new Point(poly[i].X, poly[i].Y);
if (newPoint.X > oldPoint.X)
{
p1 = oldPoint;
p2 = newPoint;
}
else
{
p1 = newPoint;
p2 = oldPoint;
}
if ((newPoint.X < p.X) == (p.X <= oldPoint.X)
&& ((long)p.Y - (long)p1.Y) * (long)(p2.X - p1.X)
< ((long)p2.Y - (long)p1.Y) * (long)(p.X - p1.X))
{
inside = !inside;
}
oldPoint = newPoint;
}
return inside;
}این (http://social.msdn.microsoft.com/forums/en-US/winforms/thread/95055cdc-60f8-4c22-8270-ab5f9870270a/)هم لینکش

راستش نمی دونم برای چندضلعی های غیرمحدب همیشه جواب میده یا نه. ولی چند مورد را امتحان کردم و جواب داد.

کسی اسم این الگوریتم رو میدونه؟

cardano7
سه شنبه 11 آبان 1389, 18:25 عصر
هیچ کسی نمی دونه اسم این الگوریتم چیه؟