Как найти точки на равном расстоянии между двумя объектами?

Я пытаюсь найти точки на равном расстоянии между двумя другими точками в трехмерном пространстве. Например, у меня в сцене 2 куба. Я хочу добавить 5 (или 3, или 80...) локаторов на равном расстоянии между этими двумя сферами с помощью Pymel.

Я могу легко найти среднюю точку между сферами, например:

import pymel.core as pm
import pymel.core.datatypes as dt

pos_1, pos_2 = pm.selected()

point_1 = dt.Vector(pos_1.getTranslation())
point_2 = dt.Vector(pos_2.getTranslation())

midway_point = (point_1 + point_2) / 2

Однако я не могу понять, как получить несколько точек на линии между двумя сферами.

Я пробовал что-то вроде этого:

import pymel.core as pm
import pymel.core.datatypes as dt

pos_1, pos_2 = pm.selected()

point_1 = dt.Vector(pos_1.getTranslation())
point_2 = dt.Vector(pos_2.getTranslation())

distance = point_1.distanceTo(point_2)
divided_distance = distance / 5

for i in range (1, 5):
    position = point_1 + (divided_distance * i)
    pm.spaceLocator(position = position, absolute = True)

Что добавляет 5 локаторов между двумя сферами, но они не находятся на линии, соединяющей две точки в трехмерном пространстве.

Может кто-то указать мне верное направление?


person Niels Vaes    schedule 09.02.2016    source источник


Ответы (1)


Когда вы вычисляете расстояние между двумя точками, вы получаете скаляр, по сути, одно число, которое представляет собой количество единиц, на которые точки удалены друг от друга. Но чего вы не получаете, так это направления от одного к другому. Это будет вектор. Чтобы получить вектор, измените эту строку:

distance = point_1.distanceTo(point_2)

к этому:

difference = point_2 - point_1

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

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

person mhlester    schedule 09.02.2016
comment
Аргх... ты абсолютно прав. Иногда мне кажется, что я полностью понимаю концепцию векторной математики, а потом появляется что-то вроде этого :) - person Niels Vaes; 09.02.2016