Градиент кривой Безье в данной точке - PullRequest
4 голосов
/ 27 января 2012

Кажется, я не могу понять, как рассчитать наклон кривой для следующей ситуации ...

По сути, я пытаюсь увеличить скорость объекта, основываясь на наклоне кривой в определенной точке. Скорость будет уменьшена, если наклон вверх, и увеличится, если вниз.

Я использовал производную точки t на кривой Безье, чтобы установить касательную, но это, похоже, не правильно, так как я ожидал бы, что это значение будет отрицательным, если наклон вниз.

Я использовал приведенное ниже уравнение для тангенса, чтобы оценить X, Y и Z, но тогда я использую только Y, чтобы установить наклон ... Я думаю, что шаг может быть неправильным

enter image description here

Есть идеи?

EDIT:

В конечном счете, это объект, движущийся вдоль наклонной плоскости, но я не могу установить угол плоскости, чтобы сделать это, я верю, что если бы я мог правильно найти угол, это может решить проблему. Я попытался взять рассматриваемую точку, а затем другую точку впереди (так, например, t = 0,5, а затем точку впереди будет t = 0,51), а затем вычислить угол, используя tan. Я полностью игнорирую ось Z, но так ли это? Если нет, то как мне рассчитать угол?

Большое спасибо

Ответы [ 2 ]

2 голосов
/ 27 января 2012

Это должно помочь: http://www.physicsclassroom.com/Class/vectors/U3L3e.cfm.

По сути, вам нужно рассчитать угол наклона. Если угол равен \ theta, то ускорение зависит от sin (\ theta).

Я предполагаю z в ​​качестве вертикального размера.

если dx, dy и dz is - градиенты в каждом направлении, dw = sqrt (dx ^ 2 + dy ^ 2). \ theta = tan_inverse (dz / dw). Ускорение = g * sin (\ theta).

ПРИМЕЧАНИЕ. Вы можете напрямую рассчитать sin (\ theta) без явного вычисления \ theta. sin (\ theta) = dz / sqrt (dx ^ 2 + dy ^ 2 + dz ^ 2).

=== Более формальное описание ===

Пусть x - это измерение восток-запад, y - это измерение север-юг, а z - измерение вверх-вниз.

Пусть z = F (x, y) дает высоту рельефа местности в любом заданном месте x, y.

Рассчитайте dz / dx = fx (x, y) и dz / dy = fy (x, y), частные производные от z w.r.t до x и y.

Теперь sin (\ theta) = dz / sqrt (dx ^ 2 + dy ^ 2 + dz ^ 2) = 1 / (sqrt ((dx / dz) ^ 2 + (dy / dz) ^ 2) = 1 / (sqrt ((1 / fx (x, y)) ^ 2, (1 / fy (x, y)) ^ 2).

Вот как вы рассчитываете грех (\ theta).

2 голосов
/ 27 января 2012
  1. Значение деривации равно отрицательно, когда наклон «нисходящий». И да, вывод является тангенсом угла наклона. Только вы должны обратить внимание на направления. Они могут изменить знак, конечно. Только вы должны взять dy / dx, а не dy / что-то еще. Это все на 2d кривых.

  2. Вы упомянули Z в последнем абзаце. У тебя кривая 3D? Тогда, конечно, термин «деривация» следует поставить более точно. Вывод из того, что вам нужно? Вторая идея - пожалуйста, объясните лучше, что вы хотите. Кстати, возможно, после того, как вы правильно запишите задачу, вы увидите решение как очевидное.

Если это 3D, скажем, у вас есть ваша кривая как 3 функции x (t), y (t), z (t). тогда вам нужно dz / dq, где dq = dt * sqrt ((dx / dt) ^ 2 + (dy / dt) ^ 2). Очевидно, не так ли? Как я уже сказал, здесь нет математики. Теорема и пропорции Пифагора. (Я беру z как высоту)

Добавление: его можно пересчитать как tan (a) = dz / (dt * sqrt ((dx / dt) ^ 2 + (dy / dt) ^ 2)) => tan (a) = (dz / dt . 2)). Но обратите внимание на направления, которые вы двигаетесь! Они могут поменять знак. Для ниже sqrt (^ 2 + ^ 2) мы потеряли направление проекции dt.

...