2

アイコンが特定のピボット (または原点) を中心に回転するスクリプトを作成しています。楕円の周りでアイコンを回転させるためにこれを機能させることができましたが、特定の幅、高さ、原点の長方形の周囲を移動させたいと思っています。

私の現在のコードはすべての座標を配列に格納し、各角度の整数をキーとしており、このコードを再利用すると作業がはるかに簡単になるため、このようにしています。

誰かが 100x150 の長方形の例を教えてくれたら、それは素晴らしいことです。

編集:明確にするために、回転とは、形状の周囲 (または周回) を移動することを意味します。

4

6 に答える 6

4

長方形のサイズがわかっているので、角度間隔全体を 4 つの異なる角度に分割する必要があるため、長方形の中心からの光線が長方形の右、上、左、または下と交差するかどうかがわかります。

角度が -atan(d/w) < alfa < atan(d/w) の場合、光線は長方形の右側と交差します。次に、長方形の中心から右側への x 変位が d/2 であることがわかっているので、変位 dy を d/2 で割ると tan(アルファ) となります。

dy = d/2 * tan(アルファ)

これを他の 3 つの角度間隔と同様に処理します。

わかりました、ここに行きます。幅w、深さdの四角形があります。真ん中に中心点 cp があります。角度アルファのさまざまな値について、P を計算したいと思います。

代替テキスト

長方形を 4 つの異なる領域、つまり角度の間隔 (1 ~ 4) に分割しました。上記の間隔は、右側の最初のものです。これがあなたにとって理にかなっていることを願っています。

最初に角度間隔を計算する必要があります。これらは w と d によって完全に決定されます。alfa の値に応じて、P を計算します。つまり、CP から P への「光線」が長方形の上辺、下辺、右辺、または左辺と交差するかどうかを計算します。

乾杯

于 2009-06-22T12:10:15.520 に答える
0

角度をパラメーターとして使用してこれを行う簡単な方法の 1 つは、長方形の境界を使用して X 値と Y 値を単純にクリップすることです。つまり、アイコンが円形または楕円形のパスを中心に回転するかのように位置を計算し、これを適用します。

(X軸の長さがXAxis、Y軸の長さがYAxisで、(0,0)を中心とする軸に沿った長方形を想定しています):

if (X > XAxis/2)    
         X = XAxis/2;

if (X < 0 - XAxis/2)
         X = 0 - XAxis/2;

if (Y > YAxis/2)    
         Y = YAxis/2;

if (Y < 0 - YAxis/2)    
         Y = 0 - YAxis/2;

このアプローチの問題は、角度が完全に正確ではなく、長方形の周囲に沿った速度が一定にならないことです。角で四角形を接する楕円をモデル化すると、影響を最小限に抑えることができますが、滑らかで一定速度の「軌道」を探している場合、この方法は適切ではありません。

于 2009-06-22T12:55:10.063 に答える
0

地球が太陽の周りを回転するように回転することを意味すると思う場合(自己回転ではありません...したがって、長方形の端に沿ってスライドする方法について質問がありますか?)

もしそうなら、これを試すことができます:

# pseudo coode
for i = 0 to 499
  if i < 100:  x++
  else if i < 250: y--
  else if i < 350: x--
  else y++

  drawTheIcon(x, y)

更新:( 以下のコメントを参照してください)

角度を使用するには、1 本の線が

y / x = tan(th)       # th is the angle

他の線は、水平または垂直であるため単純です。たとえば、x = 50 で、それを上記の行に入力して y を取得できます。水平線と垂直線の交点に対してこれを行います (たとえば、角度が 60 度で、「北東」を撃ちます... これで 2 つの点ができました。次に、原点に最も近い点が、最初に長方形)。

于 2009-06-22T12:08:51.093 に答える
0

長方形と回転中心のある紙に自分でスケッチを描きます。最初に長方形を座標系の原点の中心に移動します (移動パラメータを覚えておいてください。後で移動を逆にする必要があります)。四角形を回転させて、その辺が座標軸と平行になるようにします (同じ理由)。

これで、原点に既知の角度を持つ三角形ができ、反対側の長さが既知 (長方形の 1 辺の長さの半分) になり、次のことができるようになりました。

-- 三角形を解く

-- 回転を元に戻します

-- 翻訳を取り消します

于 2009-06-22T12:12:04.643 に答える
0

2D 変換マトリックスを使用します。多くの言語 (Java など) はこれをネイティブにサポートしています (AffineTransformation を調べてください)。それ以外の場合は、ローテーションを自分で行うルーチンを作成し、一度よくデバッグして、永久に使用してください。そのうちの 5 つを異なる言語で書かなければなりません。

簡単に回転できるようになったら、線と線の交差を実行して長方形上の位置を見つけます。2 本の線を交差させて軌道アイコンの中心を見つけます。

  1. 回転の中心から望む角度の光線
  2. 必要な角度 (4 つの象限) に囲まれた 4 つの辺の 1 つ。
于 2009-06-22T16:16:52.047 に答える