Как проверить, находится ли точка (int - Координаты) в гипотенузе треугольника - PullRequest
1 голос
/ 03 февраля 2010

У меня правильный прямоугольник, и я хочу проверить, находится ли данная точка на гипотенузе этого треугольника. Все точки являются целыми числами, а не переменными с плавающей точкой.

(разбитое изображение, исходное местоположение https://tape.bplaced.net/dl/example2.png)

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

Ответы [ 3 ]

1 голос
/ 03 февраля 2010

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

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

1 голос
/ 03 февраля 2010

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

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

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

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

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

0 голосов
/ 03 февраля 2010

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

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)
  }
}

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

...