HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2007
0127
HSP初心者不整な四角を回したい.5解決


HSP初心者

リンク

2007/1/27(Sat) 19:42:03|NO.5223

lineで結んだ不整な四角形をいずれかの一角を支点として任意角度まで回転させた図を
作成したいのですが,基礎知識が無くわかりませ〜ん.
お教え下さい.お願いします.(T_T)



この記事に返信する


ふほ

リンク

2007/1/27(Sat) 22:30:01|NO.5229

では、基礎知識として、これをどうぞ。

回転の公式
X = x * cos(deg * (PI / 180.0)) + y * sin(deg * (PI / 180.0))
Y =-x * sin(deg * (PI / 180.0)) + y * cos(deg * (PI / 180.0))

deg = 回転させたい角度
PI = 3.141592(円周率)



As

リンク

2007/1/27(Sat) 23:20:12|NO.5232


#module #deffunc aaa var p1,var p2,double p3 dir=atan(mousex-cx@,mousey-cy@) p1=sin(dir+p3)*80.0+cx@ p2=cos(dir+p3)*80.0+cy@ return #global cx=300 cy=200 *mainloop redraw 0 color boxf color 100,100,100 repeat 2000 aaa x,y,double(cnt)*0.01 pset x,y loop color 255,255,255 pset cx,cy aaa x1,y1,0 pset x1,y1 aaa x2,y2,1.123131 line x1,y1,x2,y2 aaa x3,y3,2.556 line x2,y2,x3,y3 aaa x4,y4,4.2 line x3,y3,x4,y4 aaa x4,y4,4.2 line x1,y1,x4,y4 color 255 circle x1-2,y1-2,x1+2,y1+2,0 circle x2-2,y2-2,x2+2,y2+2,0 circle x3-2,y3-2,x3+2,y3+2,0 circle x4-2,y4-2,x4+2,y4+2,0 redraw 1 wait 1 goto *mainloop

提示だけですが・・・。



HSP初心者

リンク

2007/1/27(Sat) 23:36:02|NO.5233

すみません.さっぱり判りません;
Asさん綺麗ですね☆でも四角のある一角を軸に回したいのです.
?マークが頭に飛び交ってます.(;^ _ ^)



KIMU

リンク

2007/1/28(Sun) 07:46:11|NO.5255


randomize ddim linbox,4*2 ;*1 linbox=340.0-rnd(150),240.0-rnd(150) ,340.0+rnd(150),240.0-rnd(150) ,340.0+rnd(150),240.0+rnd(150) ,340.0-rnd(150),240.0+rnd(150) ;*2 a="A","B","C","D" PIH=atan(1,0) ;ラジアン単位で90度 PI=PIH*2.0 ;ラジアン単位で180度(3.1415・・・) ROT=PI/180 ;ラジアン単位で1度 repeat redraw 0 color:boxf mr+=mousew/100 ;マウスホイール回すと回転 r=PIH+ROT*mr ;0度で横に向いてしまうので90度を足して下向きを基準にしてる cpx=linbox(RPOS*2) ;回転の中心になる座標を取り出す(最初はAの座標) cpy=linbox(RPOS*2+1) linbox2(RPOS*2)=cpx ;表示に使う配列に座標を代入 linbox2(RPOS*2+1)=cpy repeat 3,RPOS+1 ;基点になる角を抜かすので1から3回のループ linx=linbox((cnt*2)\8)-cpx ;回転の中心から回転させたい座標との差分を出す liny=linbox((cnt*2+1)\8)-cpy x=sin(r)*linx+cos(r)*liny ;差分に回転処理をする(上で ふほさん が書いてる公式と同じ) y=sin(r)*liny-cos(r)*linx linbox2((cnt*2)\8)=cpx+x ;回転処理をして出した座標に中心座標を足して回転後の座標にして、表示に使う配列に座標を代入 linbox2((cnt*2+1)\8)=cpy+y loop repeat 4 color 100,200,100 line linbox2(cnt*2),linbox2((cnt*2+1)\8),linbox2((cnt*2+2)\8),linbox2((cnt*2+3)\8) color 250,100+150*(RPOS=cnt),100+150*(RPOS=cnt) mes a(cnt) loop title str(r*180/PI) redraw 1 await 15 //この先は質問とはあまり関係ない stick ky,0 if (ky&(256+512)) { ;左右クリックで基点の角を変更 RPOS=(RPOS-((ky&256)>0)+((ky&512)>0))&3 ;0〜3 をループ mr=0 ;角度リセット memcpy linbox,linbox2,8*2*4 ;回転した座標を回転元になる座標にコピー ;*3 } loop

基点からの差分を


x=sin(r)*linx+cos(r)*liny ;差分に回転処理をする(上で ふほさん が書いてる公式と同じ) y=sin(r)*liny-cos(r)*linx
これで、回転すればいいだけ



#削除して修正入れました
#修正場所「*1,*2,*3」基点を変更した時に整数だとずれて行くので、実数に変更

#再度修正(すみません(^^;)
#テストで入れてた行が残ってたので削除



HSP初心者

リンク

2007/1/28(Sun) 19:28:40|NO.5275

みなさま有難う御座いました!!!回転の公式の使い方が判りました〜.
スッキリです★



ONION software Copyright 1997-2023(c) All rights reserved.