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


HSPTV!掲示板


未解決 解決 停止 削除要請

2016
0207
p惑星の見かけの運動15解決


p

リンク

2016/2/7(Sun) 16:25:53|NO.74495

惑星の見かけの運動を再現したソフトを作りたいです。
どうやったら、円周上で点を動かせますか?
また、点から点への線の延長はどうやったら描くことができますか?
よろしくお願いします



この記事に返信する


スペース

リンク

2016/2/7(Sun) 17:16:37|NO.74496

点の描画はpsetでできますが、circleを使った方が見やすいと思います。
線の描画はlineでできます。



cats

リンク

2016/2/7(Sun) 19:28:26|NO.74503

公転運動の中心点Oから正の方向にrの円を描くとします。(半径r)
点(r, 0)から反時計回りにΘだけ動いたとき、その座標は
(rcosΘ, rsinΘ)
で表せます。
したがって、Θを各星の公転周期に合わせて増加させてやれば座標が円に沿って変化します。
HSPでは標準でsin, cosが使用できます。
各点の線はlineとかで結べばいいです。
http://www.math.harvard.edu/~knill/teaching/math1a_2011/exhibits/trig/trig.gif



KA

リンク

2016/2/7(Sun) 22:28:36|NO.74506

簡易的な動きなら円として表現できますが、どの程度精密な計算を
しているのかで回答も変わります。



p

リンク

2016/2/8(Mon) 07:15:56|NO.74507

こういう時に三角関数って使うものなのですか。
すごく難しそう
何とか作ってみます



p

リンク

2016/2/8(Mon) 07:24:42|NO.74509

なんかうまくいきません

#define RADIUS 100 #define O_POSX 300 #define O_POSY 260 #define STARRADIUS 10 repeat x=cos(cnt)*RADIUS+O_POSX:y=sin(cnt)*RADIUS+O_POSY color 0,0,0 circle x-STARRADIUS,y-STARRADIUS,x+STARRADIUS,y+STARRADIUS wait 30 color 255,255,255 circle x-STARRADIUS,y-STARRADIUS,x+STARRADIUS,y+STARRADIUS loop



kanamaru

リンク

2016/2/8(Mon) 07:44:45|NO.74510

こんな感じでどうですか?

#define RADIUS 100 #define O_POSX 300 #define O_POSY 260 #define STARRADIUS 10 repeat color 255,255,255 boxf color 0,0,0 x=cos(0.01*cnt)*RADIUS+O_POSX:y=sin(0.01*cnt)*RADIUS+O_POSY color 0,0,0 circle x-STARRADIUS,y-STARRADIUS,x+STARRADIUS,y+STARRADIUS await 5 loop



p

リンク

2016/2/8(Mon) 18:11:17|NO.74516

おー
ありがとうございます!



p

リンク

2016/2/8(Mon) 18:51:14|NO.74517


#define O_POSX 300 #define O_POSY 320 #define SUN_STARRADIUS 20 #define EARTH_RADIUS 100 #define EARTH_STARRADIUS 10 #define EARTH_SPEED 0.01 #define MARS_RADIUS 160 #define MARS_STARRADIUS 6 #define MARS_SPEED 0.0108 screen 0,600,600 repeat redraw 0 color 255,255,255 boxf color 0,0,0 circle O_POSX-SUN_STARRADIUS,O_POSY-SUN_STARRADIUS,O_POSX+SUN_STARRADIUS,O_POSY+SUN_STARRADIUS pos earth_posx-10,earth_posy-30 mes "地球" earth_posx=cos(EARTH_SPEED*cnt)*EARTH_RADIUS+O_POSX:earth_posy=sin(EARTH_SPEED*cnt)*EARTH_RADIUS+O_POSY circle earth_posx-EARTH_STARRADIUS,earth_posy-EARTH_STARRADIUS,earth_posx+EARTH_STARRADIUS,earth_posy+EARTH_STARRADIUS circle O_POSX-EARTH_RADIUS,O_POSY-EARTH_RADIUS,O_POSX+EARTH_RADIUS,O_POSY+EARTH_RADIUS,0 pos mars_posx-10,mars_posy-26 mes "火星" mars_posx=cos(MARS_SPEED*cnt)*MARS_RADIUS+O_POSX:mars_posy=sin(MARS_SPEED*cnt)*MARS_RADIUS+O_POSY circle mars_posx-MARS_STARRADIUS,mars_posy-MARS_STARRADIUS,mars_posx+MARS_STARRADIUS,mars_posy+MARS_STARRADIUS circle O_POSX-MARS_RADIUS,O_POSY-MARS_RADIUS,O_POSX+MARS_RADIUS,O_POSY+MARS_RADIUS,0 line mars_posx,mars_posy,earth_posx,earth_posy redraw 1 await 10 loop
https://www.youtube.com/watch?v=AiihBdsy2_0
この線を延長したいです。



p

リンク

2016/2/8(Mon) 18:53:08|NO.74518

15分目あたりのところの、天球に投影するところを再現したいです。



スペース

リンク

2016/2/8(Mon) 19:36:22|NO.74521




tds12

リンク

2016/5/21(Sat) 01:10:16|NO.75534

>天球に投影
動画では3次元の空間でしたが、
NO.74517スクリプトのようになら
比較的簡単(簡単)な計算でできます。

1.あらかじめ投影したいY座標を決めておきます(仮にscreen_posy)
2.線を画面上にある1次関数のグラフとして考えます
3.傾き(仮にkatamuki)はdouble(earth_posy-mars_posy)/(earth_posx-mars_posx)
ただし、earth_posx=mars_posxの場合は除く、
その場合は、screen_posx=earth_posx
4.切片は(仮にseppen)はearth_posy-katamuki*earth_posx
5.切片と投影先Y座標の差(仮にsessa)は、
screen_posy-seppen
6.投影先X座標(screen_posx)は、
double(sessa)/katamuki
ただし、katamuki=0.0の場合は除く
このscreen_posx,screen_posyが天球上の座標になります。
さらに、天球上の座標から地球より火星が近ければ、見えることになります。

スクリプトはありますので、必要ならば投稿します。



p

リンク

2016/5/21(Sat) 07:12:05|NO.75535

本当ですか!
色々三角関数について勉強してみたのですが難しくて
スクリプト、お願いします



tds12

リンク

2016/5/21(Sat) 13:15:52|NO.75540

NO.74517のcircleからredraw 1までのところを置き換えてください。


screen_posy = 50 if earth_posx != mars_posx{ katamuki = double(earth_posy-mars_posy)/(earth_posx-mars_posx) if katamuki != 0{ seppen = earth_posy-katamuki*earth_posx sessa = double(screen_posy-seppen) screen_posx = sessa/katamuki }else{ screen_posy = earth_posy screen_posx = 0 } }else{ screen_posx = earth_posx } if (screen_posx - earth_posx)*(screen_posx - earth_posx)>(screen_posx - mars_posx)*(screen_posx - mars_posx){ line screen_posx,screen_posy,earth_posx,earth_posy }

天球の理解を間違えたかもしれません。
間違いでしたらご指摘ください。

あとMARS_SPEEDのほうがEARTH_SPEEDより速いのは問題だと思います。

このスクリプトは、ご自由にどうぞ。



p

リンク

2016/5/21(Sat) 15:26:32|NO.75541

tds12さん、ありがとうございます。
ただ、惑星が外惑星を抜かす時の、天球上での逆行が再現できなかったので、
スペースさんのおっしゃった通り、atanで角度を求める方法をとることにしました。

#define O_POSX 300 #define O_POSY 320 #define SUN_STARRADIUS 20 #define EARTH_RADIUS 120 #define EARTH_STARRADIUS 8 #define EARTH_SPEED 0.016 #define MARS_RADIUS 150 #define MARS_STARRADIUS 5 #define MARS_SPEED 0.01 screen 0, 600, 600 repeat redraw 0 color 255, 255, 255 boxf color 255, 100, 0 circle O_POSX - SUN_STARRADIUS, O_POSY - SUN_STARRADIUS, O_POSX + SUN_STARRADIUS, O_POSY + SUN_STARRADIUS color 0, 0, 200 circle O_POSX-EARTH_RADIUS, O_POSY - EARTH_RADIUS, O_POSX + EARTH_RADIUS, O_POSY + EARTH_RADIUS, 0 earth_posx = cos(EARTH_SPEED * cnt) * EARTH_RADIUS + O_POSX earth_posy = sin(EARTH_SPEED * cnt) * EARTH_RADIUS + O_POSY color 0, 0, 0 circle earth_posx - EARTH_STARRADIUS, earth_posy - EARTH_STARRADIUS, earth_posx + EARTH_STARRADIUS, earth_posy + EARTH_STARRADIUS color 0, 0, 0 pos earth_posx - 10, earth_posy - 30 mes "地球" color 0, 0, 200 circle O_POSX - MARS_RADIUS, O_POSY - MARS_RADIUS, O_POSX + MARS_RADIUS, O_POSY + MARS_RADIUS, 0 mars_posx = cos(MARS_SPEED * cnt) * MARS_RADIUS + O_POSX mars_posy = sin(MARS_SPEED * cnt) * MARS_RADIUS + O_POSY color 0, 0, 0 circle mars_posx - MARS_STARRADIUS, mars_posy - MARS_STARRADIUS, mars_posx + MARS_STARRADIUS, mars_posy + MARS_STARRADIUS color 0, 0, 0 pos mars_posx - 10, mars_posy - 26 mes "火星" rad = atan(mars_posy - earth_posy, mars_posx - earth_posx) //地球から見た火星の角度 mars_globe_posx = cos(rad) * (1000) + earth_posx //角度から線の先の座標を求める(長さは1000) mars_globe_posy = sin(rad) * (1000) + earth_posy color 0, 200, 0 line mars_globe_posx, mars_globe_posy, earth_posx, earth_posy //線を描画 redraw 1 await 10 loop



USER

リンク

2016/5/22(Sun) 19:38:37|NO.75552

ちょっと楕円にしてみるとか楽しそうですね



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