所以我上網查詢了如何根據恒星的大小和溫度以及天體與恒星的距離來計算行星體的溫度。這帶來了這個解決方案:
function calcBodyTempSolar(starTemp, starRadius, bodySemiMajorAxis) { //MAGIC math. Determines approx. body temp based on the body's distance from it's star.
return starTemp*Math.sqrt(starRadius/(2 * bodySemiMajorAxis)) * Math.pow(.7, 1/4)}
接下來我想“如果我能知道一顆行星在給定距離內的熱度,我可以將其反轉以確定“可居住區”嗎?”
我顛倒了上面的等式,但我得到了錯誤的數字。
(Math.pow(starTemp/(254.58 * Math.pow(0.7, 1/4)), 2) * (starRadius/2))/AU
運行上面的等式給了我錯誤的數字。我已經輸入了正確的地球溫度*,但它沒有給我正確的答案。(應該是 1,是 1.428...)
*如果地球沒有大氣層。
上述方程的來源在這里:https ://www.astro.princeton.edu/~strauss/FRS113/writeup3/
我在想我只是把第一個等式顛倒了錯誤。但我不確定。有沒有數學的人來衡量一下?
uj5u.com熱心網友回復:
根據源中的方程,這應該是基于恒星、大小和距離的行星溫度。(那部分你做對了)。反過來也很簡單
function calcPlanetTemp(starTemp, starRadius, distance, absorbtion) {
absorbtion = absorbtion || 0.7
return starTemp * Math.sqrt(starRadius / (2 * distance)) * Math.pow(absorbtion, 1 / 4)
}
var AU = 150 * 1e6; // distance to sun = 1 astornomical unit
// for earth and sun:
var planetTemp = calcPlanetTemp(6000, 700000, AU)
console.log("earth temp (celsius): ", planetTemp - 273.15)
console.log("(that's minus the greenhouse effect)")
// 265.1027012854874
/*
function calcStarTemp(planetTemp, starRadius, distance, absorbtion) {
absorbtion = absorbtion || 0.7
return planetTemp / (Math.sqrt(starRadius / (2 * distance)) * Math.pow(absorbtion, 1 / 4))
}
console.log("sun temp: ", calcStarTemp(planetTemp, 700000, AU))
*/
function calcDistance(planetTemp, starTemp, starRadius, absorbtion) {
absorbtion = absorbtion || 0.7
return 1 / (Math.pow(planetTemp / starTemp / Math.pow(absorbtion, 1 / 4), 2) * 2 / starRadius)
}
console.log("distance from sun: ", calcDistance(planetTemp, 6000, 700000, 0.7))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/511532.html
下一篇:如何找到滿足多個條件的最小值
