WPF 3D spherical navigation

WPF-based 3D Sphere mode of realization, the upgrade to achieve the 3D navigation Demo. First pose a demo renderings

Regular3DPoints3.gif

Coordinates of all vertices from vertex football. Fully consistent football whole sphere of regular pentagons and regular hexagons makes up the length of each of the seam, it is known to try to determine the coordinates of vertices after 60 radius of the sphere.

       image.png

Method of seeking solid geometry belong to the category of mathematics, anyway, I find many waste energy when solving entirely artisan spirit support me to solve is complete, we do not do specific details, refer to the following chart: 

Source: http://blog.sina.cn/dpool/blog/s/blog_49966d1d0100tc0d.html

image.png

image.png

image.png

image.png

 

After obtaining all the designated coordinates, you can create Viewport3D controls, and creates corresponding objects in ModelVisual3D coordinate position.

I calculated 60-point three-dimensional coordinates:

private List<Point3D> GetBuckyBallPoints()
{
    List<Point3D> ltPoints = new List<Point3D>();
    ltPoints.Add(new Point3D(.850651, 0, 2.327438));
    ltPoints.Add(new Point3D(.262866, .809017, 2.327438));
    ltPoints.Add(new Point3D(-.688191, .5, 2.327438));
    ltPoints.Add(new Point3D(-.688191, -.5, 2.327438));
    ltPoints.Add(new Point3D(.262866, -.809017, 2.327438));

    ltPoints.Add(new Point3D(1.701301, 0, 1.801708));
    ltPoints.Add(new Point3D(.52573, 1.618035, 1.801708));
    ltPoints.Add(new Point3D(.52573, -1.618035, 1.801708));
    ltPoints.Add(new Point3D(-1.376383, -.999999, 1.801708));
    ltPoints.Add(new Point3D(-1.376383, .999999, 1.801708));

    ltPoints.Add(new Point3D(1.964166, .809017, 1.275977));
    ltPoints.Add(new Point3D(1.376381, 1.618035, 1.275977));
    ltPoints.Add(new Point3D(-.162461, 2.118035, 1.275977));
    ltPoints.Add(new Point3D(-1.113517, 1.809017, 1.275977));
    ltPoints.Add(new Point3D(-2.064574, .5, 1.275977));
    ltPoints.Add(new Point3D(-2.064574, -.5, 1.275977));
    ltPoints.Add(new Point3D(-1.113517, -1.809017, 1.275977));
    ltPoints.Add(new Point3D(-.162461, -2.118035, 1.275977));
    ltPoints.Add(new Point3D(1.376381, -1.618035, 1.275977));
    ltPoints.Add(new Point3D(1.964166, -.809017, 1.275977));

    ltPoints.Add(new Point3D(2.389492, .5, .425326));
    ltPoints.Add(new Point3D(1.213921, 2.118035, .425326));
    ltPoints.Add(new Point3D(.262865, 2.427051, .425326));
    ltPoints.Add(new Point3D(-1.639248, 1.809017, .425326));
    ltPoints.Add(new Point3D(-2.227033, .999999, .425326));
    ltPoints.Add(new Point3D(-2.227033, -.999999, .425326));
    ltPoints.Add(new Point3D(-1.639248, -1.809017, .425326));
    ltPoints.Add(new Point3D(.262865, -2.427051, .425326));
    ltPoints.Add(new Point3D(1.213921, -2.118035, .425326));
    ltPoints.Add(new Point3D(2.389492, -.5, .425326));

    ltPoints.Add(new Point3D(2.227033, .999999, -.425326));
    ltPoints.Add(new Point3D(1.639248, 1.809017, -.425326));
    ltPoints.Add(new Point3D(-.262865, 2.427051, -.425326));
    ltPoints.Add(new Point3D(-1.213921, 2.118035, -.425326));
    ltPoints.Add(new Point3D(-2.389492, .5, -.425326));
    ltPoints.Add(new Point3D(-2.389492, -.5, -.425326));
    ltPoints.Add(new Point3D(-1.213921, -2.118035, -.425326));
    ltPoints.Add(new Point3D(-.262865, -2.427051, -.425326));
    ltPoints.Add(new Point3D(1.639248, -1.809017, -.425326));
    ltPoints.Add(new Point3D(2.227033, -.999999, -.425326));

    ltPoints.Add(new Point3D(2.064574, .5, -1.275977));
    ltPoints.Add(new Point3D(1.113517, 1.809017, -1.275977));
    ltPoints.Add(new Point3D(.162461, 2.118035, -1.275977));
    ltPoints.Add(new Point3D(-1.376381, 1.618035, -1.275977));
    ltPoints.Add(new Point3D(-1.964166, .809017, -1.275977));
    ltPoints.Add(new Point3D(-1.964166, -.809017, -1.275977));
    ltPoints.Add(new Point3D(-1.376381, -1.618035, -1.275977));
    ltPoints.Add(new Point3D(.162461, -2.118035, -1.275977));
    ltPoints.Add(new Point3D(1.113517, -1.809017, -1.275977));
    ltPoints.Add(new Point3D(2.064574, -.5, -1.275977));

    ltPoints.Add(new Point3D(1.376383, .999999, -1.801708));
    ltPoints.Add(new Point3D(-.52573, 1.618035, -1.801708));
    ltPoints.Add(new Point3D(-1.701301, 0, -1.801708));
    ltPoints.Add(new Point3D(-.52573, -1.618035, -1.801708));
    ltPoints.Add(new Point3D(1.376383, -.999999, -1.801708));

    ltPoints.Add(new Point3D(.688191, .5, -2.327438));
    ltPoints.Add(new Point3D(-.262866, .809017, -2.327438));
    ltPoints.Add(new Point3D(-.850651, 0, -2.327438));
    ltPoints.Add(new Point3D(-.262866, -.809017, -2.327438));
    ltPoints.Add(new Point3D(.688191, -.5, -2.327438));

    return ltPoints;
}

Renderings realized

Regular3DPoints2.gif

Regular3DPoints4.gif

Regular3DPoints5.gif

    Tools: Visual Studio 2017

    Project: WPF C #

    Source Downloads:

     

 

 

 

Guess you like

Origin www.cnblogs.com/duel/p/regular3dpoints.html