2Dの矩形を回転させる時に好きな座標を基準に回転させたい

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
H.MAI

2Dの矩形を回転させる時に好きな座標を基準に回転させたい

#1

投稿記事 by H.MAI » 10年前

2Dで表示された矩形を回転させる時に現在使っているライブラリだと矩形の中心を基準に回転してしまいます。
これを好きな座標を基準に回転した結果と同じになるように矩形の表示座標(x,y矩形の左上)を設定し直したいです。
現在使っているライブラリから設定、取得できる値は、角度angleと座標を表すx,yです。
流れとしては以下のような感じです。

コード:

 
set_obj_position(100, 100);
set_obj_rotation(45);  //オブジェクトの中心を基準に45°回転
//このままだと普通に矩形(オブジェクト)の中心で回転しただけなので
//例えば矩形の左上(100, 100)を基準に回転した結果と同じになるように
//矩形の座標(x,y)を再設定したい。
set_obj_position(?,?) 
矩形のangleとx,yの情報のみしか扱えないですがこれで可能でしょうか?
ご教示の方宜しくお願いいたします。

アバター
usao
記事: 1892
登録日時: 12年前
連絡を取る:

Re: 2Dの矩形を回転させる時に好きな座標を基準に回転させたい

#2

投稿記事 by usao » 10年前

>これを好きな座標を基準に回転した結果と同じになるように矩形の表示座標(x,y矩形の左上)を設定し直したいです。

「好きな座標」(x,y)が,そのライブラリでの回転によって(x',y')に行ってしまうという計算を自前で行い,
(x',y')が(x,y)にくるように位置をオフセットすれば良いように思います.

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: 2Dの矩形を回転させる時に好きな座標を基準に回転させたい

#3

投稿記事 by みけCAT » 10年前

矩形の幅や高さが取得できないと、難しいかもしれません。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

H.MAI

Re: 2Dの矩形を回転させる時に好きな座標を基準に回転させたい

#4

投稿記事 by H.MAI » 10年前

返信ありがとうございます。

>>usaoさん
なるほど。そうですね!
ただ具体的な計算方法が…
自分でも考えてみますね!

>>みけCAT
言い忘れてました!
矩形の幅や高さは取得できるのでした。
すみません。

アバター
usao
記事: 1892
登録日時: 12年前
連絡を取る:

Re: 2Dの矩形を回転させる時に好きな座標を基準に回転させたい

#5

投稿記事 by usao » 10年前

>ただ具体的な計算方法が…

回転行列とかで検索すればすぐに見つかるかと思います.

H.MAI

Re: 2Dの矩形を回転させる時に好きな座標を基準に回転させたい

#6

投稿記事 by H.MAI » 10年前

回転行列とかで検索すればすぐに見つかるかと思います.[/quote]

ありがとうございます!あとは調べて自分でがんばります!

H.MAI

Re: 2Dの矩形を回転させる時に好きな座標を基準に回転させたい

#7

投稿記事 by H.MAI » 10年前

こんな感じで実現できました!ありがとうございました!!

コード:

float objX = 100;   //オブジェクトX
float objY = 100;   //オブジェクトY
float rotX = 100;   //回転基準X
float rotY = 100;   //回転基準Y
float W = 50;       //幅
float H = 50;       //高さ
float x = objX - (rotX - (W/2));
float y = objY - (rotY - (H/2));
float angle = 45;
float Cos = cos(angle*RAD);
float Sin = sin(angle*RAD);

//移動
set_obj_position((x*Cos - y*Sin) + rotX, (x*Sin + y*Cos) + rotY);
//回転
set_obj_rotation(angle);

閉鎖

“C言語何でも質問掲示板” へ戻る