[Змінена відповідь на основі коментарів]
Якщо ви хочете побачити, чи точка знаходиться в межах, скажімо, 10 одиниць, якщо сірий прямокутник на зображенні нижче, ви перевірте, чи є точка в якомусь із
- червоний прямокутник
- Синій прямокутник
- будь-яке зелене коло (радіус 10)
inside=false;
bluerect.x=oldrect.x-10;
bluerect.y=oldrect.y;
bluerect.width=oldrect.width;
bluerect.height=oldrect.height+20;
if( point.x >=bluerect && point.x <=redrect.x+bluerect.width &&
point.y >=bluerect && point.y <=redrect.y+bluerect.height){
//now point is side the blue rectangle
inside=true;
}
redrect.x=oldrect.x;
redrect.y=oldrect.y-10;
redrect.width=oldrect.width+20;
redrect.height=oldrect.height;
if( point.x >=redrect&& point.x <=redrect.x+redrect.width &&
point.y >=redrect&& point.y <=redrect.y+redrect.height){
//now point is side the redrectangle
inside=true;
}
d1= distance(point, new point(oldrect.x, oldrect.y)) //calculate distance between point and (oldrect.x, oldrect.y)
d2= distance(point, new point(oldrect.x+10, oldrect.y))
d3= distance(point, new point(oldrect.x, oldrect.y+10))
d4= distance(point, new point(oldrect.x+10, oldrect.y+10))
if (d1 < 10 || d2 <10 || d3 < 10 || d4 <10){
inside=true;
}
//inside is now true if the point is within 10 units of rectangle
Цей підхід трохи неелегантний. Аналогічний метод, який дозволяє уникнути тестування всіх 4 кутів за допомогою симетрії прямокутника, задокументований тут на стартовому потоці