Как перевести движение на Canvas3D в движение в виртуальном трехмерном мире - PullRequest
0 голосов
/ 21 мая 2010

Моя цель - переместить фигуру в виртуальном мире таким образом, чтобы она оказалась там, где указатель мыши находится на холсте.

Что у меня есть: позиция мыши (x, y) на объекте Canvas3D -Point3d объект, где луч выбора, начинающийся из области просмотра Canvas3D, пересекается с первым объектом сцены. (точка в трехмерном пространстве, где я хочу начать перетаскивание)

Что я хочу: -Некоторый способ перевести координаты Point3d так, чтобы начальная точка пересечения (объект Point3d) всегда перекрывала положение мыши на холсте (так же, как когда я использовал луч выбора, чтобы определить, что пользователь нажал из объекта Canvas3D ).

Спасибо!

1 Ответ

1 голос
/ 21 мая 2010

Звучит так, как будто вы хотите использовать плоскость, параллельную плоскости фона и содержащую точку пересечения с объектом. Вы можете использовать эту плоскость, даже когда мышь выходит за пределы реального фона, поскольку это просто математическая концепция, которая простирается до бесконечности.

Я не программист на Java, поэтому не могу дать вам код, но я математик, так что здесь вам нужно уравнение;)

Пусть P обозначает исходную точку пересечения и назовет единицу плоскости фона нормальной n. Эта норма также является нормой нашей плоскости интересов. Пусть R обозначает точку на луче, а l обозначает ее единичный вектор направления.

Тогда уравнение плоскости имеет вид (x-P) .n = 0 для точки x на плоскости (через. Обозначает скалярное произведение двух векторов). Уравнение точки на луче имеет вид x = R + t * l, где t - любое действительное число. Следовательно, луч пересекает плоскость, когда

(т * 1 + R - P) .n = 0

т.е.. когда

t = (P - R) .n / (l.n)

Это дает вам значение t для включения обратно в уравнение луча, чтобы дать точку пересечения.

...