Render.ru

Не срабатывает оператор if

Турбо_ХХХ

Пользователь сайта
Рейтинг
4
#1
Всем доброго времени суток. Сначала расскажу, что нужно сделать.
Есть мешь рук насаженные на кости. Необходимо вывести позицию вершины (vertex) кончика пальцев.

Итак, известно точное расстояние от кости фаланги пальца до этой вершины.
Я решил просто при помощи for сравнить расстояние всех вершин с заданным.
Скрипт такой:

Код:
for i in objects do if classOf i == Editable_Mesh do obj=i -- получаю объект на котором ищу вершину (в сцене всего один объект класса Editable_Mesh)
z_dist = [0.0327497,-0.0125671,0.0100674] -- заданная дистанция от фаланги до вершины
 
for v = 1 to getNumVerts obj do -- ковыряю каждую вершину по порядку
(
    dist = getVert obj v - $bip01_l_finger12.pos -- получаю дистанцию
    rd = dist - z_dist -- должно получится [0,0,0]
    if v == 1044 do b = rd -- специально поставил для проверки так как точно знаю индекс вершины 1044 в данной сцене, но в разных сценах индекс может изменяться поэтому нельзя применять одно и то же число
    if rd == [0,0,0] do messagebox ("Index: "+(v as string)) -- этот if должен срабатывать когда rd = [0,0,0], т.е. разница между искомым и найденным расстоянием равна нулю, но сообщения messagebox нет
   
)
f = b -- MAXScript Listener здесь показывает [0,0,0] значит всё правильно считает, а if не срабатывает
Никак не могу понять что за беда, почему if не срабатывает?



Прошу помощи в решение проблемы. Заранее спасибо!
 

Турбо_ХХХ

Пользователь сайта
Рейтинг
4
#2
Оказывается MAX имеет свойство округлять числа, поэтому и не работало. В общем, если кому нужно, решил как всегда через задний проход:

Код:
obj=0
v=0
for i in objects do if classOf i == Editable_Mesh do obj=i
z_dist = [0.0327497,-0.0125671,0.0100674]
z_dl = sqrt(z_dist.x^2+z_dist.y^2+z_dist.z^2)
dopusk = 0.001 -- %
 
do
(
    v+=1
    v_pos = getVert obj v  - $bip01_l_finger12.pos
    dl = sqrt(v_pos.x^2+v_pos.y^2+v_pos.z^2)
)
while dl<z_dl*(100-dopusk)/100 or dl>z_dl*(100+dopusk)/100
 
Сверху