0

好的,所以我有一条从已知角度射下来的射线。我知道角度、射线的长度、顶端和底端的坐标。我选择了一个预定义的 (x,y) 底端,并使用 sin() 和 cos() 我设法确定了射线顶端的 (x,y) 位置以保持角度。但到目前为止我所做的是在它的起始位置绘制射线。为了让我在保持角度的同时移动它,我需要速度。

我有这个例子 http://www.processing.org/learning/topics/reflection1.html 但我就是不知道如何计算速度。如果你们能给我一些代码或让我了解如何去做,我将不胜感激。

我正在处理中对此进行编码。如果你能用这种语言向我解释,那就太好了,如果不是……简单的文字解释就足够了。谢谢!

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)。每次修改坐标后,我都会再次画线。

4

1 回答 1

1

您需要将计算域 (x, y) 拆分为速度的 (x, y) 分量。对于光线从镜子或表面反射/反射的效果,为了论证,我们假设光束/相互作用具有零恢复(即与表面碰撞后的光线速度相同) . 因此,在这种情况下,射线速度的 x 分量(称为 u - 垂直于平面)不会改变并且是恒定的,速度的 y 分量(称为 v - 垂直于平面)将是逆转。所以速度的变换将是 (u, v) -> (u, -v)。

就这么简单,希望对你有帮助。

于 2012-09-28T11:07:42.590 回答