[解決済み] Javascriptで2Dの回転を計算する方法
2022-03-07 03:04:03
質問
私は三角法にあまり詳しくないのですが、2次元で回転させる点が2つしかありません。
*nx, ny
. -
. -
. angle -
*cx,cy.................*x,y
cx, cy = 回転中心
x,y = 現在のx,y
nx, ny = 新しい座標
ある角度で新しい点を計算するには?
解き方は?
function rotate(cx, cy, x, y, angle) {
var radians = (Math.PI / 180) * angle,
cos = Math.cos(radians),
sin = Math.sin(radians),
nx = (cos * (x - cx)) + (sin * (y - cy)) + cx,
ny = (cos * (y - cy)) - (sin * (x - cx)) + cy;
return [nx, ny];
}
最初の2つのパラメータは、中心点(2点目を回転させる原点)のXとYの座標です。次の2つのパラメータは、回転させる点の座標である。最後のパラメータは角度で、単位は度です。
例として、点(2, 1)を点(1, 1)を中心に時計回りに90度回転させます。
rotate(1, 1, 2, 1, 90);
// > [1, 0]
この機能に関する3つの注意点
-
時計回りの回転の場合、最後のパラメータ
angle
は正でなければなりません。反時計回りの回転の場合(提供された図のように)、負にする必要があります。 -
例えば、原点 (0, 0) を中心に (5, 0) を 90 度回転させると (0, -5) になるはずですが、JavaScript の丸め動作は、どちらの座標も期待通りの整数に近い値であっても、まだ float である可能性があることを意味します。例えば
rotate(0, 0, 5, 0, 90); // > [3.061616997868383e-16, -5]
このため、生成される配列の両要素はfloatとして期待されるはずです。を使って整数に変換することができます。
Math.round()
,Math.ceil()
またはMath.floor()
を使用します。 -
最後に、この関数は 直交座標系 つまり、Y軸の値は座標平面上でquot;up"に行くほど高くなります。HTML / CSSでは、Y軸は反転しており、Y軸の値は、移動するにつれて高くなります。 ページの下 .
関連
-
[解決済み】NodeJS "ESモジュールをロードするためにインポートを使用する必要があります。"
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] JavaScriptでメールアドレスを検証するのに最適な方法は何ですか?
-
[解決済み] JavaScriptでタイムスタンプを取得する方法は?
-
[解決済み] Androidのローテーションでアクティビティを再開する
-
[解決済み】JavaScriptで文字列の出現箇所をすべて置換する方法
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】document.getElementByIDは関数ではありません。
-
[解決済み】Uncaught ReferenceError: angular is not defined - AngularJSが動作しない。
-
[解決済み】webpack: モジュールが見つかりません。Error: 解決できない(相対パスで)
-
[解決済み】最大呼び出しスタックサイズ超過エラーとその修正方法とは?
-
[解決済み】コンソールがUnterminated JSX contentsエラーを投げる【終了しました
-
[解決済み】Reactのeslintエラーはpropsの検証で見つからない
-
[解決済み】XMLパースエラー:ルート要素が見つからない コンソールの場所 FF
-
[解決済み】Jestが予期しないトークンに遭遇した
-
[解決済み】 \u003C とは何ですか?
-
[解決済み】react router v^4.0.0 Uncaught TypeError: 未定義のプロパティ'location'を読み取れない