1. Пользоваться форумом на планшетах и телефонах стало удобнее благодаря Tapatalk

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

Тема в разделе "MAXScript", создана пользователем Турбо_ХХХ, 29 май 2014.

Модераторы: Savin Denis
  1. Турбо_ХХХ

    Турбо_ХХХ Пользователь сайта

    С нами с:
    19.03.2011
    Сообщения:
    19
    Симпатии:
    1
    Баллы:
    4
    Всем доброго времени суток. Сначала расскажу, что нужно сделать.
    Есть мешь рук насаженные на кости. Необходимо вывести позицию вершины (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 не срабатывает?

    [​IMG]

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

    Турбо_ХХХ Пользователь сайта

    С нами с:
    19.03.2011
    Сообщения:
    19
    Симпатии:
    1
    Баллы:
    4
    Оказывается 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
     
Модераторы: Savin Denis

Поделиться этой страницей