【PHP】原点または任意点で回転させた座標を求める方法

更新日:2023/09/19

PHPで原点または任意点を中心として点を回転させ、回転後の点の座標を取得する方法を紹介します。

 

原点または任意点で回転させた座標を求める関数コード

まずはコードから。

原点または任意点で回転させた座標を求める関数は、次のようなコードになります。

/* 原点または任意点を中心に座標を回転
*  $x , $y : 回転させる点の座標
*  $angle: 度数
*  $cx , $cy : 回転中心
*  $roundup: 結果を四捨五入するかどうか
*  return: 配列 [回転後のx座標,回転後のy座標]
*/
function rotatePoint($x,$y,$angle,$cx=0,$cy=0,$roundup=true){
    $radian = deg2rad($angle); // 度数→ラジアン
    $cos = cos( $radian );
    $sin = sin( $radian );
    // 回転中心を(0,0)としたときの回転対象座標を求める
    $x -= $cx; $y -= $cy; 

    $rx = ($cos * $x - $sin * $y) + $cx;
    $ry = ($sin * $x + $cos * $y) + $cy;

    return $roundup ? [round($rx,0),round($ry,0)] : [$rx,$ry];
}

$angleに正の値を指定すると、反時計回りで回転します。

実行すると、次のように配列を返します。

print_r( rotatePoint( 100 , 0 , 90) );  // Array( [0] => 0, [1] =>100)
print_r( rotatePoint( 100 , 0 , 45) );  // Array( [0] => 71, [1] =>71)
print_r( rotatePoint( 242 , -222 , 123) ); // Array( [0] => 54, [1] =>324)
print_r( rotatePoint( 100 , 100 , 270 , 150 , 150) ); // Array( [0] => 100, [1] =>200 )

 

解説

原点(0,0)を中心として点(x,y)をΘだけ回転させた点を(X,Y)とするとき、次の式が成り立ちます。

X = x cosθ − y sinθ
Y = x sin𝜃 + y cos𝜃

PHPはcosθ と sinθ を求める関数があるのでそれを使用します。
ただし引数がラジアンなので、度数をdeg2rad()でラジアンに変換してから渡します。
後は式に当てはめてコードを作成するだけですね。

任意点で回転させるときは、任意点を中心座標(0,0)と想定したときの回転対象座標を求めます。
そして上記の式で回転させて、中心座標を元の位置に戻せば求めることができます。

更新日:2023/09/19

書いた人(管理人):けーちゃん

スポンサーリンク

記事の内容について

null

こんにちはけーちゃんです。
説明するのって難しいですね。

「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。

裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。
そんなときは、ご意見もらえたら嬉しいです。

掲載コードについては事前に動作確認をしていますが、貼り付け後に体裁を整えるなどをした結果動作しないものになっていることがあります。
生暖かい視線でスルーするか、ご指摘ください。

ご意見、ご指摘はこちら。
https://note.affi-sapo-sv.com/info.php

 

このサイトは、リンクフリーです。大歓迎です。