如何轻松地在向量上生成(球体)3d点的网格?

ppcbkaq5  于 2021-07-05  发布在  Java
关注(0)|答案(1)|浏览(315)

最近,我一直在尝试在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);
  }

}

问题是这些点是按照一个类似于黄金螺旋的算法生成的,所以我不能根据实际点、下一个点和下一个点绘制三角形。。。有什么想法吗?
这就是我所拥有的。

这就是我想要的。

plicqrtu

plicqrtu1#

看起来你要找的术语是三角测量。在2d中,您将主要使用delaunay三角剖分,因为它产生非常漂亮的三角形。我从来没有见过它用于三维,但根据维基百科,似乎存在一个版本的它为两个以上的维度(也matlab提供了一个工具箱与三维德洛奈)。

相关问题