2015-03-28 2 views
1

Мне было интересно, есть ли простой способ реализовать прыгающую физику в Python без каких-либо модулей, которые занимаются физикой. Подпрыгивая физика, я не имею в виду с гравитацией, я имею в виду больше похожую на недавно выпущенную iOS-игру «Хорошо?» Филипп Столленмайер (https://appsto.re/us/1N7v5.i). Я знаю, что если мяч попадает в прямые края, его скорости инвертируются. Итак, с учетом этой диаграммы: Когда мяч попадает на A и C, его скорости X инвертируются, а когда он достигает B и D, его скорости Y инвертируются. Но что, если наша диаграмма выглядит так: Учитывая угол платформы, как я могу найти новые скорости X и Y? Кроме того, как я могу преобразовать эти скорости X и Y в градусы?Python простая физика отскока

То, что я выяснил из Википедии, состоит в том, что линия симметрии отклонения перпендикулярна поверхности, на которую он попадает.

Последний вопрос: как в pygame найти угол линии и создать линию с определенным углом.

PS: Отвечая на мой вопрос, пожалуйста, киль в виде, что моя математика знание ограниченно к тому, что на NYS Алгебра 1 регент в июне :) Так что не все cauculus и тригонометрию на меня :)

+0

http://scienceworld.wolfram.com/physics/AngleofReflection.html –

+2

вы не можете действительно сделать математику без математики ... –

+0

Посмотрите, ребята, бодрый физик не какое-то древний секрет охраняет поколение , так что вы могли бы также дать ответ. – SigTerm

ответ

1

reflectedVector = velocityVector - scale(surfaceNormal, 2.0*dot(surfaceNormal, velocityVector))

velocityVector - скорость движения, представленная Vector, движущаяся к поверхности. surfaceNormal перпендикулярно к поверхности, с длиной 1.

dot является dot product. dot(v1, v2) = v1.x*v2.x + v1.y*v2.y

scale является векторной «шкалой» операции. scale(inVec, scalar) = vector2d(inVec.x*scalar, inVec.y*scalar) `

Отражайте скорость, только если она направлена ​​на поверхность, если она уходит, нет.

  1. Если dot(surfaceNormal, velocity) < 0 мяч движется к нему.
  2. Если dot(surfaceNormal, velocity) == 0.0 шар находится параллельно поверхности.
  3. Если dot(surfaceNormal, velocity) > 0.0 шар отходит от поверхности.
+0

Чтобы помочь мне понять это, не могли бы вы привести пример того, как это будет использоваться? –

+0

@LukTaylor: ??? "для каждого объекта в сцене, если он встречается со стеной и скоростью направляется в сторону стены, отражают скорость, иначе не " – SigTerm