所以我正在研究一个带有javascript和canvas的粒子发射器 我希望能够根据角度设置粒子的发射方向。
这可以通过此功能完成:
y = Math.tan(45 * Math.PI/180);
如果角度为45,则返回1.等等。
但我并不知道如何实现这一点,因为像素计算有点不同。将-1视为每步移除一个像素,将1视为添加一个像素。
如果角度为45,则Y为1,X为1,这是正确的 但是要使像素在315度下行进,Y为-1,X应为1 在225度时,Y应为-1(但为1),X应为-1。
如果它应该像这样工作,该如何看待它?
这是一个如何思考的形象:
(发射器位于原点。)
答案 0 :(得分:1)
实际上很简单,
angle = (angle * Math.PI/180) % 360;
tangent = Math.tan(angle);
因为你不知道x在哪里;
section_x_positive = (angle<90||angle>270?1:-1);
section_y_positive = (angle>0&&angle<180?1:-1);
x = abs(tangent) * section_x_positive;
y = abs(tangent) * section_y_positive;
答案 1 :(得分:0)
在我看来,你的问题就是你在思考方向,这是一个向量,就好像它是一个标量。
您需要记住2D矢量表示为两个组成部分:
你可以按单位矢量工作,所以幅度r = 1。
因此,如果你有一个方向角,它应该以弧度为单位,以逆时针方向增加,并从x = 0水平轴开始,你最终得到的单位向量的两个分量指向你想要的方向。