我正在尝试创建星系 3D 分布的模拟。
星系是点。
question1.htm使用galaxydata1.txt计算和加载星系位置:
rawFile.open("GET", "galaxydata1.txt", false);
var parts = data[i].split("\t");
var D = parts[0];
var glon = parts[1]*3.1416/180;
var glat = parts[2]*3.1416/180;
var z = D*Math.sin(glat);
var xy = D*Math.cos(glat);
var x = xy*Math.cos(glon);
var y = xy*Math.sin(glon);
dotGeometry.vertices.push(new THREE.Vector3( x, y, z ));
我希望模拟在资源有限的设备中工作。所以,我想我可以预先计算位置并将它们保存在文件中。
我使用write.htm创建了 galaxydata2.txt。
question2.htm使用galaxydata2.txt加载星系位置:
var parts = data[i].split(" ");
rawFile.open("GET", "galaxydata2.txt", false);
dotGeometry.vertices.push(new THREE.Vector3( parts[0], parts[1], parts[2] ));
可以验证转换是准确的,因为question1.htm和question2.htm生成的模型完全相同。
现在,我已经实现了一个星系搜索功能,它按名称搜索一个星系并将其居中:
controls.target = dots.geometry.vertices[i];
您可以通过搜索 m31(仙女座星系的名称之一)来尝试。
令人困惑的是,虽然银河搜索功能在question1.htm中有效,但在question2.htm中无效!
自从过去 2 天以来,我已经花了几十个小时试图找到原因,但无法找到原因。
请注意,我使用完全相同的代码来计算这两种情况下的位置。
最有可能的是,我遗漏了一些在这里的专家会立即清楚的东西。
如果/可能的话,请指导我。