Math - Получить координаты x & y с интервалами вдоль линии - PullRequest
2 голосов
/ 06 февраля 2012

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

Я знаю, как получить наклон между двумя точками, у-образной точкой пересечения линии и 2 + b 2 = c 2 , я просто не могу вспомнить / понять, как использовать наклон или угол, чтобы получить a и b (x и y), заданные c.

visualization

Кто-нибудь знает математическую формулу для определения a и b с учетом c, y-точки пересечения и наклона (или угла)? (AS3 тоже хорошо.)

Ответы [ 5 ]

4 голосов
/ 06 февраля 2012

У вас есть треугольник:

  |\             a^2 + b^2 = c^2 = 16^2 = 256
  |  \                     
  |    \  c      a = sqrt(256 - b^2)
a |      \       b = sqrt(256 - a^2)
  |        \
  |__________\
       b

Вы также знаете (m наклон):

a/b = m
  a = m*b

Исходный треугольник:

      m*b = a = sqrt(256 - b^2)
m^2 * b^2 = 256 - b^2

Кроме того, начиная с m = c, вы можете сказать:

      m^2 * b^2 = m^2 - b^2
(m^2 + 1) * b^2 = m^2

Поэтому:

b = m / sqrt(m^2 + 1)

Мне лень, поэтому вы можете найти a себя: a = sqrt(m^2 - b^2)

3 голосов
/ 06 февраля 2012

Пусть s будет помоем.

у нас есть: 1) s^2 = a^2/b^2 ==> a^2 = s^2 * b^2

и: 2) a^2 + b^2 = c^2 = 16*16

заменить a^2 в 2) на 1):

b = 16/sqrt(s^2+1)

и

a = sqrt((s^2 * 256)/(s^2 + 1)) = 16*abs(s)/sqrt(s^2+1)

Выше я предполагаю, что вы хотите получить длину a и b. На самом деле, s является значением со знаком, поэтому a может быть отрицательным. Следовательно, добавочное значение a будет действительно:

a = 16s/sqrt(s^2+1)
2 голосов
/ 06 февраля 2012

Класс Point, встроенный во Flash, имеет замечательный набор методов для выполнения именно того, что вы хотите. Определите линию, используя две точки, и вы можете использовать метод «интерполяции», чтобы автоматически получать точки дальше по линии без какой-либо тригонометрии.

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/geom/Point.html#interpolate()

2 голосов
/ 06 февраля 2012

Учитывая уравнение для линии как y = наклон * x + пересечение, вы можете просто подключить значения x и прочитать обратно значения y.

Ваша проблема заключается в вычислении размера шага вдоль оси x (насколько велико изменение x в результате 16-пиксельного перемещения вдоль линии, которая b на включенном графике). Учитывая, что вы знаете a ^ 2 + b ^ 2 = 16 (по определению) и наклон = a / b, вы можете вычислить это:

slope = a / b => a = b * slope [умножить обе стороны на b]

a ^ 2 + b ^ 2 = 16 => (b * наклон) ^ 2 + b ^ 2 = 16 [путем подстановки из предыдущего шага]

Я оставлю это вам решать за б. Получив b, вы можете вычислить (x, y) значения следующим образом:

for x = 0; x += b
    y = slope * x + intercept
    echo (x,y)
loop
2 голосов
/ 06 февраля 2012

Уклон dy / dx. Или в ваших условиях A / B.

Поэтому вы можете шагать вдоль линии, добавляя A к координате Y и B к координате X. Вы можете масштабировать A и B, чтобы сделать шаги больше или меньше.

Рассчитать уклон и получить А и Б.

Возьмите две точки на линии (X1, Y1), (X2, Y2)

A= (Y2-Y1)
B= (X2-X1)

Если вы рассчитываете это с двумя точками, которые вы хотите перебрать, просто разделите A и B на количество шагов, которые вы хотите сделать

STEPS=10
yStep= A/STEPS
xStep= B/STEPS

for (i=0;i<STEPS;i++)
{
    xCur=x1+xStep*i;
    yCur=y1+yStep*i;

}
...