https://bduvenhage.me/geometry/2019/07/31/generating-equidistant-vectors.html
image.png话不多说,代码如下:
using System;
using Rhino;
using Rhino.Commands;
using Rhino.Geometry;
namespace SectionGridTool.Commands
{
[System.Runtime.InteropServices.Guid("c7c0da31-3e16-49bc-8b09-0f2c53998adf")]
public class geoSphere : Command
{
static geoSphere _instance;
public geoSphere()
{
_instance = this;
}
///<summary>The only instance of the geoSphere command.</summary>
public static geoSphere Instance
{
get { return _instance; }
}
public override string EnglishName
{
get { return "geoSphere"; }
}
protected override Result RunCommand(RhinoDoc doc, RunMode mode)
{
// TODO: complete command.
createPoints(doc);
return Result.Success;
}
private void createPoints(RhinoDoc doc)
{
double gr = (Math.Sqrt(5.0) + 1.0) / 2.0; // golden ratio = 1.6180339887498948482
double ga = (2.0 - gr) * (2.0 * Math.PI); // golden angle = 2.39996322972865332
int num_points = 1000;
for (double i=1; i <= num_points; ++i)
{
double lat = Math.Asin(-1.0 + 2.0 * i / (num_points+1));
double lon = ga * i;
double x = 10 * Math.Cos(lon) * Math.Cos(lat);
double y = 10 * Math.Sin(lon) * Math.Cos(lat);
double z = 10 * Math.Sin(lat);
doc.Objects.AddPoint(new Point3d(x, y, z));
}
}
}
}
网友评论