0

我正在尝试创建星系 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.htmquestion2.htm生成的模型完全相同。

现在,我已经实现了一个星系搜索功能,它按名称搜索一个星系并将其居中:

controls.target = dots.geometry.vertices[i];

您可以通过搜索 m31(仙女座星系的名称之一)来尝试。

令人困惑的是,虽然银河搜索功能在question1.htm中有效,但在question2.htm中无效!

自从过去 2 天以来,我已经花了几十个小时试图找到原因,但无法找到原因。

请注意,我使用完全相同的代码来计算这两种情况下的位置。

最有可能的是,我遗漏了一些在这里的专家会立即清楚的东西。

如果/可能的话,请指导我。

4

1 回答 1

1

您的搜索功能中的 dots.geometry.vertices 尚未转换为浮点数。它们都是字符串。

1:n {x:“ -34.10470732858122”,y:“ 95.777578953486031”,Z:“ -66.5290694134713”} 2:n {x:x:x:x:“ -23.203347016490690160606074.644444444444444444444444444444444444444444444444444.” n {x:“-22.228259825915906”,y:“57.0117730686664”,z:“-31.448405312168955”}

所以这行不通。

加载数据后,您需要对数据执行 .parseFloat,然后再将其填充到几何图形中。

于 2020-06-10T04:16:31.677 回答