hinekure.net が http://hspdev-wiki.net/ から自動クローリングした結果を表示しています。画像やリソースなどのリンクが切れています。予めご了承ください。
公転 - HSP開発wiki
トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS

小ワザ
HSP3掲示板で出た話題のまとめです。2次元で、回る軌跡が面白いので、まとめました。

概要

kakie さんの

たとえば「さいころ」が自転しながら太陽の回りを回る(公転)みたいな動きをさせたいのですが どうすればいいでしょうか。 

公転の方はaddang ,setang などつかえばいいなとわかるんですが 自転の方がどうしてもわかりません。

この自転も公転もいろいろ速度を変えたりしたいです。

ヒントだけでもお教えくださるとありがたいです。 よろしくお願いします。

より、掲示板で出た答を掲載します。

数英知さんの答

一平面だけで考えると、2Dでも考え方は同じだと思いますので、

2Dでサンプル作ってみました。

Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
repeat
redraw 0
color 1,1,1
boxf
color 255,255,255
circle 120,120,360,360,0
a=120.0*cos(3.14*cnt/180)+240
b=-120.0*sin(3.14*cnt/180)+240
circle int(a)-8,int(b)-8,int(a)+8,int(b)+8,1
c=24.0*cos(3.14*4*cnt/180)
d=-24.0*sin(3.14*4*cnt/180)
e=24.0*cos(3.14*4*cnt/180+3.14/2)
f=-24.0*sin(3.14*4*cnt/180+3.14/2)
circle int(a)-4+int(c),int(b)-4+int(d),int(a)+4+int(c),int(b)+4+int(d),1
line int(a)-int(c),int(b)-int(d),int(a)+int(e),int(b)+int(f)
line int(a)+int(e),int(b)+int(f),int(a)+int(c),int(b)+int(d)
line int(a)+int(c),int(b)+int(d),int(a)-int(e),int(b)-int(f)
line int(a)-int(e),int(b)-int(f),int(a)-int(c),int(b)-int(d)
redraw 1
wait 1
loop

秋房さんの答

Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
/*[記事修正]*/
/*面白そうなので真似してみました。*/
#module
#deffunc arc int xx,int yy,int r1,int r2,int ff,local p1,local p2
        p1 = cos(45*(3.141528/180))*r1
 if r2 {p2 = cos(45*(3.141528/180))*r2}
 else  {p2 = cos(45*(3.141528/180))*r1}
 circle xx-p1,yy-p2,xx+p1,yy+p2,ff
return
#global
 
x0 = (640/2) :y0 = (480/2)
r0 =  150    :r1 =   30
sp =    5    :rd = (3.141592/180)
repeat
   redraw 0
   color 0 :boxf :color 255,255,255
   arc x0,y0,150
      x1 = x0+cos(double(cnt)*rd)*r0    :y1 = y0+sin(double(cnt)*rd)*r0
      ii = cnt*sp
      x2 = x1+cos(double(ii    )*rd)*r1 :y2 = y1+sin(double(ii    )*rd)*r1
      x3 = x1+cos(double(ii+ 90)*rd)*r1 :y3 = y1+sin(double(ii+ 90)*rd)*r1
      x4 = x1+cos(double(ii+180)*rd)*r1 :y4 = y1+sin(double(ii+180)*rd)*r1
      x5 = x1+cos(double(ii+270)*rd)*r1 :y5 = y1+sin(double(ii+270)*rd)*r1
      color ,,255      :arc x1,y1,10,5,1
      color   255      :arc x2,y2,5,,1
      line x2,y2,x3,y3 :line x3,y3,x4,y4
      line x4,y4,x5,y5 :line x5,y5,x2,y2
      color 255,255,255
 redraw 1
 await 10
loop

kakieさん自身の回答

Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
#include "hgimg3.as"
 
screen 0,640,480
cls 4
hgini
 
setsizef 4, 4
setcolor 200,200,255
addbox model
regobj box, model, 0
regobj box0, model, 0
 
gsel 0
cammode CAM_MODE_NORMAL
setpos HGOBJ_CAMERA, 0, 0, 80
setdir HGOBJ_CAMERA, 0, 0, 0
 
r0 =  10.0 ;公転半径
sp0 =  0.5 ;公転速度
sp1 =  5.0 ;自転速度
rd = (3.141592/180)
 
repeat
hgdraw
;公転
x = r0 * cos( double(cnt) * sp0 * rd)
y = r0 * sin( double(cnt) * sp0 * rd)
setpos box,x,y,0
;自転
addang box, 0, 0, sp1 * rd
hgsync 10
loop
トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS
Last-modified: 2008-12-06 (土) 20:14:54 (1827d)