2016-11-14 10 views
0

Я хочу, чтобы проверить, если точка Р (x1, y1) принадлежит, находится внутри, квадрат с центром С (х, у) и горизонтальная диагональ г.Проверить, если точка принадлежит к площади

  • площади с вышеуказанными характеристиками:

enter image description here

  • Функция, которая вычисляет расстояние между двумя точками

    float calculate_distance (float x1,float y1,float x2 ,float y2) 
    { 
        float distance; 
        float distance_x = x1-x2; 
        float distance_y = y1- y2; 
        distance = sqrt((distance_x * distance_x) + (distance_y * distance_y)); 
        return distance; 
    } 
    
+0

Всегда (\ *) предпочитает 'double' (а не' float') для переменных с плавающей запятой. (\*) Да всегда! – pmg

+0

У math.stackexchange.com есть похожие вопросы. [Как проверить, находится ли точка внутри прямоугольника?] (Http://math.stackexchange.com/questions/190111/how-to-check-if-a-point-is-inside-a-rectangle) – dilanaslan

ответ

2

Вы не нуждаются в евклидовом расстоянии между точками.

Так же, как для окружности (в начале координат) вы знаете, что х + у некоторая константа (г), здесь вы знаете, что | х | + | у | является некоторой постоянной (r снова), что еще проще. Фактически вы можете интерполировать между этими фигурами, используя показатели между 1 и 2.

Итак, чтобы проверить, находится ли точка (x, y) внутри алмаза (без ограничения общности можно считать, что она центрирована в начале координат) , просто тест

fabsf(x)+fabsf(y) <= r