2015-11-19 81 views
-1

我想知道,以模擬在Y和Z軸的日出/日落的最佳途徑。目前,它不會是我想要什麼,但移動得太快(每3秒說它已經完成一個完整的太陽路徑,並已朝着反向回原點)。太陽運動(Y/Z軸運動)

我知道這與變量結合正弦和餘弦,秒做,因爲這個函數被調用並移動光的每一個幀位置。基本上我希望它鏈接到的50我的遊戲定時器:

  • 50秒鐘,這兩點是日出
  • 25秒是中午
  • 0秒這是日落/ GAME OVER

目前,我有:

lightPosition = Point_E3d(0, 
          std::abs(100 *std::cos(seconds)), 
          -100 * std::sin(seconds)); 

想知道什麼是正確的代碼格式來實現這種效果。

回答

1

這僅僅是簡單的三角函數。正弦(x * n)和餘弦(x * n)的週期(直到函數重複的時間)都是2 * pi/n。在這種情況下,n = 1,所以週期爲6.28,這意味着整整一天(​​和晚上)將持續6.28秒。如果要增加句點,請將seconds參數乘以小於1的數字。代數的一點點表明:

period of sin(x * n) = 2*pi/n 
period of sin(.1256 * x) = 2*pi/.1256 = 6.28/0.1256 = 50 

因此,採取秒* 0.1256正弦和餘弦,而不是僅僅秒。

lightPosition = Point_E3d(0, 
          std::abs(100 *std::cos(seconds * 0.1256)), 
          -100 * std::sin(seconds * 0.1256)); 

請注意,這也包括夜間時間。如果您只想讓12小時的一天時間持續50秒,請乘以0.1256的一半,即0.0628。

+0

@Psychosupreme嘗試翻轉罪和cos。那樣有用嗎? – DJMcMayhem

+0

雅也如此,刪除註釋因爲我想通了,你回答我猜的沒錯前笑 – Psychosupreme