0

わかりました、既知の角度から光線が降りてきます。角度、光線の長さ、上端と下端の座標を知っています。定義済みの (x,y) 下端を選択し、sin() と cos() を使用して、角度を維持するために光線の上端の (x,y) 位置を決定することができました。しかし、これまでに行ったことは、光線を開始位置に描画することです。角度を保ったまま動かすには速度が必要です。

この例 http://www.processing.org/learning/topics/reflection1.html がありますが、その速度を計算する方法がわかりません。皆さんが私にコードを投げてくれたり、その方法を理解してくれたりしてくれたら、とても感謝しています.

これをProcessingでコーディングしています。もしあなたがこの言語で私に説明してくれるなら、それは素晴らしいことです。ありがとうございました!

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 に答える