我正在尝试创建星系3D分布的模拟。
星系是点。
问题 1.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。
问题 2.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] ));
可以验证变换是否准确,因为问题 1.htm 和问题 2.htm 生成完全相同的模型。
现在,我实现了一个星系搜索功能,它按名称搜索星系并将其居中:
controls.target = dots.geometry.vertices[i];
您可以通过搜索m31(仙女座星系的名称之一(来尝试。
令人困惑的是,虽然星系搜索功能在问题1.htm中起作用,但在问题2.htm中不起作用!
自过去两天以来,我花了数十个小时试图找到原因,但无法得到它的头或尾。
请注意,我在这两种情况下都使用了完全相同的代码来计算仓位。
最有可能的是,我错过了一些专家可以立即清楚的东西。
如果/如果可能,请指导我。
搜索函数中的dots.geometry.vertices尚未转换为浮点数......它们都是字符串。
1: n {x: "-34.10470732858122", y: ">95.77578953486031", z: "-66.52906941334713 "} 2: n {x: "-23.203470164906907", y: "64.44921156287786", z: "-43.97565350543055 "} 3: n {x: "-22.228259825915906", y: "57.0117730686664", z: "-31.448405312168955 "}
所以这是行不通的。
在将数据填充到几何图形中之前,您需要在加载数据后对数据执行 .parseFloat。