9
7

OutSystemsで座標を回転する

Last updated at Posted at 2024-02-03

はじめに

てきとうな2点を結んで直線にしたときに
直線が斜めになっていたり原点から離れていたりして困ることはありませんか?
OutSystemsを使って任意の2点(直線)を原点と(x,0)に戻す処理を作りたいと思います。

※ただし x>0とします。

計算方法

概要

  1. 1点を原点に平行移動、もう1点も同様に平行移動
  2. y=0と平行移動した2点からSinθ,Cosθを算出
  3. 回転

詳しくは下で書きます。

1.点の平行移動

  1. 任意の2点(a,b),(c,d)を選択
  2. 原点に平行移動する点を(a,b)とし、2点ともx軸方向に-a,y軸方向に-bだけ平行移動

2.sinθとcosθの算出

平行移動した2点(0,0),(c-a,d-b)と(c-a,0)から三角比を使ってSinθ,Cosθ(符号あり)を算出

三角比

さんかく3.png

Sinθ=γ/α, Cosθ=β/α

3.回転

θ回転する行列は

\begin{pmatrix}
X \\
Y
\end{pmatrix}
=
\begin{pmatrix}
\cos\theta & -\sin\theta \\
\sin\theta & \cos\theta
\end{pmatrix}
\begin{pmatrix}
x\\
y
\end{pmatrix}

ですが、今回は平行移動させた2点を原点と(x,0)に戻すために逆回転(-θ回転)をしたいのでこちらを使います。

\begin{pmatrix}
X \\
Y
\end{pmatrix}
=
\begin{pmatrix}
\cos\theta & \sin\theta \\
-\sin\theta & \cos\theta
\end{pmatrix}
\begin{pmatrix}
x\\
y
\end{pmatrix}
逆回転
逆回転は回転する角度がθから-θになるので
\begin{pmatrix}
\cos(-\theta) & -\sin(-\theta) \\
\sin(-\theta) & \cos(-\theta)
\end{pmatrix}
=
\begin{pmatrix}
\cos\theta & \sin\theta \\
-\sin\theta & \cos\theta
\end{pmatrix}

となります。

これを前提として

  1. 求めたSinθとCosθを逆回転行列に代入
  2. 逆回転行列を使って計算して(X,Y)=(xCosθ+ySinθ,-xSinθ+yCosθ)を算出

実装

計算方法で説明した処理は、OutSystems内のアクションとして作成します。

・平行移動の処理:「ParallelMove」アクション
・SinθとCosθを算出する処理:「CosSin」アクション
・回転する処理:「RotateMove」アクション

作成した処理を下に貼ります。

それぞれの処理のinputとoutput ParallelMove
・input:任意の2点
・output:平行移動した点

CosSin
・input:平行移動した2点
・output:SinθとCosθ

RotateMove
・input:平行移動した2点,SinθとCosθ
・output:回転した2点

タイトルなし3.png

実行

2点入力して回転ボタンを押します。
スクリーンショット 2023-11-30 105015.png

試しに4回入力してデータベースを覗いてみます。
スクリーンショット 2023-12-25 172946.png

4回とも2つの点が原点と(x,0)になっていることを確認できました。

簡単な説明 ・PointX1,PointY1,PointX2,PointY2:座標
・RotateOriginX,RotateOriginY:回転後の原点
・RotateOtherX,RotateOtherY:回転後のもう1点

さいごに

今回は2点(直線)でやりましたが他の図形にも応用できると思います。

9
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
7