正文
*
Math
.
PI
/
180
,
startRadius
,
0
,
10
*
Math
.
PI
);
要能把产生 xy 坐标绘制出来看到环绕黑洞的路径就好了。用下面这个方法可以实现:
var getXYPhotonPathFromSolution = function (sol) {
// Note: transpose(sol.y)[0] contains the u values.
// transpose(sol.y)[1] contains u_prime values.
var rValues = numeric.transpose(sol.y)[0]
.map(function (u) {
// we want the radius r = 1/u
return 1 / u;
});
var phiValues = sol.x;
var photonPath = [];
for (var i = 0; i < rValues.length; i++) {
// Negative r is nonsensical, and this can occur as
// radius goes to infinity. Stop when you start
// hitting infinity
if (rValues[i] < 0) break;
var x = rValues[i] * Math.cos(phiValues[i]);
var y = rValues[i] * Math.sin(phiValues[i]);
photonPath.push([x, y]);
}
return photonPath;
}
终于,我们可以使用 numeric.js 的试验台 REPL 标出光子路径的 xy 坐标了。你需要把之前的函数拷贝到 REPL 中,这样你才可以在上面的函数中使用它们。
为了在 REPL 中绘制答案,我们需要完成几个操作:如果把绘图的边界定死就可以很容易地看到结果,因此我们首先设置绘图默认的边界。接着,创建两个解,一个是 15° 角的光线,另一个是 40° 角。然后,我们获取这两个解的光子的 xy 路径。最后,绘制结果。
> var plotOptions = { xaxis: { min: -20, max: 20 }, yaxis: { min: -20, max: 20 } }
> var sol1 = getBlackHoleSolution(15 * Math.PI / 180, startRadius