0

インターネット上にはチュートリアルがたくさんありますが、適切な解決策が見つかりません! 線を描いてから、とp1=(0,0); p2=(0,j)を実行します。の新しい座標は?translation(h,k)rotation(a)p2

変換行列を見た後に得た一般的な式は次のとおりですが、うまくいかないようです:

x' = (x*cos(a)) + (y*-sin(a)) + h
y' = (x*sin(a)) + (y*cos(a)) + k

だから私のp2

x' = (j*-sin(ofDegToRad(a))) + h
y' = (j*cos(ofDegToRad(a))) + k

私は何を間違っていますか?

編集:

以下の回答を含むコードをアップロードしましたが、まだ機能していません (?)。コードの小さなサンプルを含む画像をここに置きました

値を印刷すると、x = -141.5, y = 254.9

ラインの終点を取得したい (始点がウィンドウの中央にある場合)

4

1 に答える 1

3

あなたが示した方程式は、最初に回転を行い、次に平行移動を行っています。これは、あなたが言った順序とは逆です。最初に翻訳を行う場合は、次のようになります。

x' = x + h
y' = y + k

つまり、p1' は (h, k) で、p2' は (h, j+k) です。次に、回転は次のとおりです。

x' = (x*cos(a)) - (y*sin(a))
y' = (x*sin(a)) + (y*cos(a))

つまり、あなたの p1'' は

( (h*cos(a)) - (k*sin(a)), (h*sin(a)) + (k*cos(a)) )

そして、あなたのp2 ''は

( (h*cos(a)) - (j+k)*sin(a)), (h*sin(a)) + ((j+k)*cos(a)) ).

これらはすべて、理解された原点 (0,0) から開始することを前提としています。

代わりに、最初にローテーションを行うと、次のようになります。

p1' = ( 0, 0 ) [when you rotate (0,0) you get (0,0)]
p2' = ( -j*sin(a), j*cos(a) )

次に、(h, k) による変換を行います。

p1' = ( h, k )
p2' = ( h - j*sin(a), k + cos(a) )
于 2013-05-26T14:35:17.010 に答える