好的,所以我有一条从已知角度下来的光线。我知道角度,光线的长度,顶端和底端的坐标。我选择了预定义的(x,y)底端和sin()和cos()我设法确定光线顶端的(x,y)位置以保持角度。但到目前为止我所做的就是将射线拉到它的起始位置。为了让我在保持角度的同时移动它,我需要速度。
我有这个例子 http://www.processing.org/learning/topics/reflection1.html 但我无法弄清楚如何计算这个速度。如果你们可以给我一些代码或让我理解如何去做,我会非常感激。
我在Processing中编码。如果你能用这种语言向我解释它会很棒,如果不是......简单的单词解释就足够了。谢谢!
L.E。
void RayRoad(float angle)
{
//h is the hypothenuse of a right triangle and also my ray
//knowing the angle and h, i calculate the opposite and adjacent
float h=3*linii, o, a, Jx,Jy;
float theta=radians(angle);
o=h*sin(theta);
a=h*cos(theta);
//(X1,Y1) bottom end of ray are known
//I determine de top end of the ray (X2,Y2) using a and o
X2=X1+a;
Y2=Y1-o;
MoveRay();
}
void MoveRay()
{
line(X1,Y1,X2,Y2);
ModifyCoords();
}
现在我有必要的数据,以便我以正确的角度绘制那条光线。但我需要移动它(让它降下来)我想知道我应该修改多少(X1,Y1)和(X2,Y2)。在每次修改坐标后,我再次画线。
答案 0 :(得分:1)
您需要将计算域(x,y)拆分为速度的(x,y)分量。对于光线反射/从镜子或表面反射的效果,让我们假设为了论证,光束/相互作用具有零恢复(即与表面碰撞后的光线速度相同) 。因此,在这种情况下,光线速度的x分量(称为u - 横向于平面)将不会改变并且是恒定的,速度的y分量(称为v - 垂直于平面)将是逆转。因此,速度的变换将是(u,v) - > (你,-v)。
就这么简单,我希望这会有所帮助。