Как сделать Gears меш - PullRequest
       12

Как сделать Gears меш

1 голос
/ 12 сентября 2011

(я не знаю много терминологии типа шестерен ...)

У меня есть две шестерни (шестеренки A и B), которые я пытаюсь получить в меш.

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

Проблема
У меня проблемы с вычислением того, какой должна быть шестерня B вращения, когда она расположена рядом с шестерней A, чтобы шестерни на шестернях сцеплялись друг с другом (размер шестерни одинаков наобе шестерни).

Шестерня A центрирована в x1, y1 и повернута на q градусов.Шестерня B центрирована в x2, y2 и находится на расстоянии d от шестерни A. Расстояние между двумя зубцами на шестерне составляет c .

Я использую Math.atan2(y2-y1, x2-x1) *(180/Math.PI);чтобы вычислить угол между двумя зубчатыми колесами относительно начала координат, но не всегда получается хороший результат (может быть проблема в моем коде где-то еще, не уверен ...) Я думал использовать этот угол и q для вычисления значения вращения для шестерни B.

Я, вероятно, мог бы использовать q%c, чтобы получить более точное / меньшее значение вращения для шестерни B, но не совсем уверен, как действовать.

1 Ответ

3 голосов
/ 12 сентября 2011

Рассмотрим механизм с n зубцами. Если n четно, то напротив каждого винтика находится другой зубец. Если n нечетно, то напротив каждого винтика есть метка (или любой другой правильный термин). В любом случае, если вы повернете шестерню на 2π / n радиан, она будет выглядеть так же, как и раньше - каждая шестеренка «переместилась». Так что угол имеет значение только по модулю 2π / n.

Рассмотрим две одинаковые шестерни, зацепленные друг с другом, центрированные по оси x (y = 0). Если n нечетно, то их угол может быть равен (мы можем назвать этот угол 0, когда шестеренка указывает в направлении x ), и в целом, если одна шестерня находится под углом a , то другой будет под углом -a . Если n даже тогда, когда одна передача находится в 0, другая будет в π / n, и, в общем, когда одна находится в a , другая будет в π / na .

Теперь предположим, что на шестерне слева («шестерня A») имеется n шестеренок, а на шестерне справа («шестерня B») - m шестеренок. Если m нечетно, то, когда шестерня B находится на am , шестерня A на -an . Если m четное, когда шестерня B находится на am , шестерня A на π / n-an .

Теперь предположим, что их центры не имеют одно и то же значение y, так что центр шестерни B находится под углом b , как видно из центра шестерни A. Теперь вычтите этот угол из угла вращения каждой передачи, и вы уменьшаете проблему до предыдущей.

...