2010-02-03 3 views
1

У меня есть правильный треугольник, и я хочу проверить, соответствует ли данный пункт Hypotenuse этого треугольника. Все точки представляют собой простые целые числа, а не переменные с плавающей запятой. https://tape.bplaced.net/dl/example2.pngКак проверить, находится ли точка (int-Coordinates) внутри гипотенузы треугольника

Edit: Все зеленые квадраты будут на гипотенузе, белые квадраты нет. Я знаю x, y, координаты углов и координаты точки, которую я хочу проверить. Все координаты - это целые числа (y немного отрисован на чертеже, извините).

+1

Что вы подразумеваете под «гипотенузой»? Из этого примера я бы сказал, что что-либо в пределах поля, описанного треугольником, будет квалифицироваться. Можете ли вы добавить несколько точек, которые не являются «на гипотенузе». – meagar

+0

@raphaelr: Ваше изображение 404'd. – kennytm

+0

хорошо, исправлено. – raphaelr

ответ

1

Это может работать:

Вы знаете треугольник, так просто создать функцию для гипотенузы, в вашем примере это будет y = 5x/12. Если вы сейчас получите очко, скажем x = 6, y = 3, вы можете использовать эти переменные, чтобы узнать, выходит ли он правильно: 3 = roundup(5*6/12). Если это так, точка находится на треугольнике, если нет - тогда нет.

+1

работает отлично. – raphaelr

0

Начну делать это:

points = an array; 
delta=y/x 
acc = 0 
j = 0 
for (i=0;i<x;i++){ 
    points.push(i, j) 
    acc+=delta 
    while (acc > 1){ 
    acc-=1 
    j++ 
    points.push(i,j) 
    } 
} 

И тогда у вас есть все точки гипотенузы. Есть лучшие алгоритмы рисования линий, но это может быть началом.

1

Существует два случая: один, где гипотенуза вертикальна, а другая - там, где нет.

Для вертикального случая вы просто проверяете, имеет ли рассматриваемая точка значение y в диапазоне гипотенузы.

Для не вертикального случая выведите уравнение гипотенузы с использованием его конечных точек. Уравнение прямой y = mx + b, где m - наклон dx/dy. Тогда b = y - mx.

Теперь, когда у вас есть m и b, проверьте, удовлетворяет ли точка-кандидат x и y уравнению (равна ли точка y m * x + b?).

Однако, практически, вы должны проверить близость, а не точное равенство, поэтому проверьте, находится ли точка y в пределах небольшой дельта (m * x + b).

Смежные вопросы