1

私は数学フレームワークにsylvester.jsを使用していますが、(おそらく) ジオメトリを忘れているか、正しく使用していないようです。私はしようとしています:

var angle = 45;
var line1 = $L([1,1],[Math.tan(angle * Math.PI/180),Math.tan(angle * Math.PI/180)]); //Should be a 45-degree angle
angle = -45;
var line2 = $L([0,0],[Math.tan(angle * Math.PI/180),Math.tan(angle * Math.PI/180)]); //Should be a -45-degree angle
line1.intersects(line2);
//returns false, should be true, I would think?

これにより、-45 度で 0,0 を通る線と、45 度で交差する 1,1 を通る別の線が作成されるはずですよね? 助言がありますか?(注: 私は通常、Math.PI/180 の代わりに deg2rad 変数を使用します。これは純粋に例のためです)

4

3 に答える 3

2

角度の正接は、隣接する脚の反対側の脚の長さに等しいことを思い出してください。つまりライズオーバーラン。したがって、接線は、線に沿ったベクトルではなく、線の傾きを示します。

ここに画像の説明を入力

角度をベクトルに変換するには、サインとコサインを使用します。

m⃑ = [cos(θ), sin(θ)]

これは、極座標からデカルト座標に変換する式でわかります。

(x, y) = (r * cos(θ), r * sin(θ))

マグニチュードは問題ではないので (マグニチュードがあったとしても、ベクトルを正規化します)、方程式から "r" を除外すると、上記のm⃑$Lの方程式が得られます。

コード内の各方向ベクトルについて、2 つのコンポーネントが等しいことに注意してください。したがって、ベクトルは y=x の線上にあります。したがって、それらは平行です。ベクトルが互いにスカラー倍数であるため、ベクトルが平行であることを示すこともできます。より具体的には、ベクトルの方向が反対であるため (スカラーは負)、それらはantiparallelです。基準点 (0,0) と (1,1) は両方の線上にあるため、各ベクトルがまたがる線は重なります。Sylvester.jsLine.intersectsは、一意の交点がある場合にのみ true を返します。2 つの線はどこでも交差するため、一意の点はなく、関数は false を返します。

于 2012-07-25T21:11:31.033 に答える
1

角度からベクトルを定義するには、次の計算が必要です。

x = sin(angle)
y = cos(angle)

あなたはこれをしました:

x = tan(angle)
y = tan(angle)
于 2012-07-25T21:07:43.140 に答える
0

私はシルベスターをあまり扱ったことがないので、これは単なる推測ですが、 line は vector の特別なインスタンスであるため、問題は定義方法にある可能性があります。line2 を定義して [0,0] に固定すると、2 番目のポイントは [-.013, -.013] になります。路線が双方向に延長されるかどうかはわかりません。

于 2012-07-25T21:04:34.813 に答える