我正在制作一个带有一些弹跳元素的游戏(我使用pygame), 我的元素有2个属性,一个是角度,一个是速度 这是元素移动的方式:
mvx = math.sin(self.angle) * self.speed
mvy = -math.cos(self.angle) * self.speed
self.x += mvx
self.y += mvy
我的问题是:我知道顶部的角度(99.6°),有碰撞点(x和y),但是我找不到底部的角度(42.27°) 有人可以在第一个角度和第二个角度之间建立关系吗?
答案 0 :(得分:2)
我建议对圆形表面上的入射向量计算reflection向量。
在以下公式中,N
是圆的法线向量,I
是入射向量(弹跳球的当前方向向量),R
是反射向量(出射方向向量)弹跳球)
R = I - 2.0 * dot(N, I) * N.
要计算法线向量,您必须知道“命中”点(dvx
,dvy
)和圆心(cptx
,{{1} }):
cpty
计算反射:
circN = (pygame.math.Vector2(cptx - px, cpty - py)).normalize()
可以通过math.atan2(y, x)
计算新角度:
vecR = vecI - 2 * circN.dot(vecI) * circN
代码清单:
self.angle = math.atan2(vecR[1], vecR[0])
import math
import pygame
答案 1 :(得分:0)
三角形的内角总和为self.array_gpu = cuda.mem_alloc(some_array.nbytes)
。同样,角度180°
是三角形旁边的角度的补充(用99.96°
称),即A
就是99.96° + A = 180°
。调用A = 180° - 99.96°
的底角。对于最后一个角度B = 42.27°
,我们可以说它与顶点相对,而另一个角度等于C
。
然后:
2 * 28.85 = 57.7°
P.S .:我知道值并不完全相等,但这一定是因为小数点后的舍入