最近,我一直在尝试在3d球体表面上均匀分布点,经过一些研究,这是我的处理代码(java):
import peasy.*;
PVector[] points_;
PVector[] generatePoints(int numberOfPoints){
PVector[] points = new PVector[numberOfPoints];
float gr = (float) (3-Math.sqrt(5));
float lambda = PI * gr;
for(int i=0; i<numberOfPoints; i++){
float t = (float)i/numberOfPoints;
float a1 = acos(1-2*t);
float a2 = lambda * i;
float x = sin(a1) * cos(a2);
float y = sin(a1) * sin(a2);
float z = cos(a1);
PVector p = new PVector(x,y,z).mult(30);
points[i] = p;
}
return points;
}
void setup(){
size(600,600,P3D);
PeasyCam cam = new PeasyCam(this,100);
cam.setMinimumDistance(50);
cam.setMaximumDistance(500);
points_ = generatePoints(1000);
}
void draw(){
background(0);
stroke(255);
strokeWeight(2);
for(int i=0; i<points_.length; i++){
point(points_[i].x,
points_[i].y,
points_[i].z);
}
}
问题是这些点是按照一个类似于黄金螺旋的算法生成的,所以我不能根据实际点、下一个点和下一个点绘制三角形。。。有什么想法吗?
这就是我所拥有的。
这就是我想要的。
1条答案
按热度按时间plicqrtu1#
看起来你要找的术语是三角测量。在2d中,您将主要使用delaunay三角剖分,因为它产生非常漂亮的三角形。我从来没有见过它用于三维,但根据维基百科,似乎存在一个版本的它为两个以上的维度(也matlab提供了一个工具箱与三维德洛奈)。