基于WPF的3D Sphere实现模式,升级实现了该3D导览Demo。先pose一张demo效果图

所有顶点的坐标来源于足球的顶点。足球整个球面完全由正五边形和正六边形拼成,每条拼缝的长度一致,故知道球体半径后即可设法求出60个顶点的坐标。

具体求法属于数学的立体几何范畴,反正求解时废了我蛮多精力的,完全是工匠精神支撑我求解完成,具体就不做详述了,可参考以下图:

来源:http://blog.sina.cn/dpool/blog/s/blog_49966d1d0100tc0d.html

得到所有定点坐标后,即可创建Viewport3D控件,并在坐标位置创建相应的ModelVisual3D对象。

我计算得到的60个点3维坐标:

private List<Point3D> GetBuckyBallPoints()
{
List<Point3D> ltPoints = new List<Point3D>();
ltPoints.Add(new Point3D(., , 2.327438));
ltPoints.Add(new Point3D(., ., 2.327438));
ltPoints.Add(new Point3D(-., ., 2.327438));
ltPoints.Add(new Point3D(-., -., 2.327438));
ltPoints.Add(new Point3D(., -., 2.327438)); ltPoints.Add(new Point3D(1.701301, , 1.801708));
ltPoints.Add(new Point3D(., 1.618035, 1.801708));
ltPoints.Add(new Point3D(., -1.618035, 1.801708));
ltPoints.Add(new Point3D(-1.376383, -., 1.801708));
ltPoints.Add(new Point3D(-1.376383, ., 1.801708)); ltPoints.Add(new Point3D(1.964166, ., 1.275977));
ltPoints.Add(new Point3D(1.376381, 1.618035, 1.275977));
ltPoints.Add(new Point3D(-., 2.118035, 1.275977));
ltPoints.Add(new Point3D(-1.113517, 1.809017, 1.275977));
ltPoints.Add(new Point3D(-2.064574, ., 1.275977));
ltPoints.Add(new Point3D(-2.064574, -., 1.275977));
ltPoints.Add(new Point3D(-1.113517, -1.809017, 1.275977));
ltPoints.Add(new Point3D(-., -2.118035, 1.275977));
ltPoints.Add(new Point3D(1.376381, -1.618035, 1.275977));
ltPoints.Add(new Point3D(1.964166, -., 1.275977)); ltPoints.Add(new Point3D(2.389492, ., .));
ltPoints.Add(new Point3D(1.213921, 2.118035, .));
ltPoints.Add(new Point3D(., 2.427051, .));
ltPoints.Add(new Point3D(-1.639248, 1.809017, .));
ltPoints.Add(new Point3D(-2.227033, ., .));
ltPoints.Add(new Point3D(-2.227033, -., .));
ltPoints.Add(new Point3D(-1.639248, -1.809017, .));
ltPoints.Add(new Point3D(., -2.427051, .));
ltPoints.Add(new Point3D(1.213921, -2.118035, .));
ltPoints.Add(new Point3D(2.389492, -., .)); ltPoints.Add(new Point3D(2.227033, ., -.));
ltPoints.Add(new Point3D(1.639248, 1.809017, -.));
ltPoints.Add(new Point3D(-., 2.427051, -.));
ltPoints.Add(new Point3D(-1.213921, 2.118035, -.));
ltPoints.Add(new Point3D(-2.389492, ., -.));
ltPoints.Add(new Point3D(-2.389492, -., -.));
ltPoints.Add(new Point3D(-1.213921, -2.118035, -.));
ltPoints.Add(new Point3D(-., -2.427051, -.));
ltPoints.Add(new Point3D(1.639248, -1.809017, -.));
ltPoints.Add(new Point3D(2.227033, -., -.)); ltPoints.Add(new Point3D(2.064574, ., -1.275977));
ltPoints.Add(new Point3D(1.113517, 1.809017, -1.275977));
ltPoints.Add(new Point3D(., 2.118035, -1.275977));
ltPoints.Add(new Point3D(-1.376381, 1.618035, -1.275977));
ltPoints.Add(new Point3D(-1.964166, ., -1.275977));
ltPoints.Add(new Point3D(-1.964166, -., -1.275977));
ltPoints.Add(new Point3D(-1.376381, -1.618035, -1.275977));
ltPoints.Add(new Point3D(., -2.118035, -1.275977));
ltPoints.Add(new Point3D(1.113517, -1.809017, -1.275977));
ltPoints.Add(new Point3D(2.064574, -., -1.275977)); ltPoints.Add(new Point3D(1.376383, ., -1.801708));
ltPoints.Add(new Point3D(-., 1.618035, -1.801708));
ltPoints.Add(new Point3D(-1.701301, , -1.801708));
ltPoints.Add(new Point3D(-., -1.618035, -1.801708));
ltPoints.Add(new Point3D(1.376383, -., -1.801708)); ltPoints.Add(new Point3D(., ., -2.327438));
ltPoints.Add(new Point3D(-., ., -2.327438));
ltPoints.Add(new Point3D(-., , -2.327438));
ltPoints.Add(new Point3D(-., -., -2.327438));
ltPoints.Add(new Point3D(., -., -2.327438)); return ltPoints;
}

实现的效果图

工具:Visual Studio 2017

工程:WPF C#

源码下载:

WPF 3D 球面导览的更多相关文章

  1. WPF 3D足球导览

    根据博文:https://www.cnblogs.com/duel/p/regular3dpoints.html获取足球的3D坐标后,在每一个坐标位置创建一个ModelVisual3D元素,既能实现炫 ...

  2. JavaScript实现的3D球面标签云效果

    这个效果都是由 FLASH 实现的,能不能由 JavaScript 实现呢? 我们也十分喜欢这个效果,就花了一些时间写出来了,如图所示: 效果预览点这里:http://www.miaov.com/mi ...

  3. WPF 3D model - Sphere, Cone, and Cylinder

    原文:WPF 3D model - Sphere, Cone, and Cylinder   Extending Visual3D - Sphere, Cone, and Cylinder http: ...

  4. WPF 3D 知识点大全以及实例

    引言 现在物联网概念这么火,如果监控的信息能够实时在手机的客服端中以3D形式展示给我们,那种体验大家可以发挥自己的想象. 那生活中我们还有很多地方用到这些,如上图所示的Kinect 在医疗上的应用,当 ...

  5. 优化WPF 3D性能

    Maximize WPF 3D Performance .NET Framework 4.5   As you use the Windows Presentation Foundation (WPF ...

  6. WindowsPhone开发—— 使用手绘图片做景区导览地图

    前些日子在做景区App遇到需求,使用手绘图片做一个简易的地图,支持放大缩小平移以及显示景点Mark,安卓上可以使用一个叫做“mAppWidget”的开源库来完成,WP上有人建议用ArcGIS,但是考虑 ...

  7. js矩阵菜单或3D立体预览图片效果

    js矩阵菜单或3D立体预览图片效果 下载地址: http://files.cnblogs.com/elves/js%E7%9F%A9%E9%98%B5%E8%8F%9C%E5%8D%95%E6%88% ...

  8. WPF 3D 小小小小引擎 - ·WPF 3D变换应用

    原文:WPF 3D 小小小小引擎 - ·WPF 3D变换应用 WPF可以提供的3D模型使我们可以轻松地创建3D实体,虽然目前来看还很有一些性能上的问题,不过对于一些简单的3D应用应该是可取的,毕竟其开 ...

  9. 分享一个3D球面标签云

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

随机推荐

  1. LeetCode 5282. 转化为全零矩阵的最少反转次数

    地址 https://leetcode-cn.com/submissions/detail/39277402/ 题目描述给你一个 m x n 的二进制矩阵 mat. 每一步,你可以选择一个单元格并将它 ...

  2. webpack 4.x 从零开始初始化一个vue项目

    创建目录 项目名称: vue-init app css reset.sass js home index.vue router index.js main.js App.vue views index ...

  3. ruby传参之引用类型

    ruby是完全面向对象语言,所有的变量所储存的,其实是对象的引用. 所以ruby方法的参数,也都是引用类型.即使是基本的类型,比如布尔,整数,小数等,也是一样. class MyObject attr ...

  4. 全面解析JVM加载中初始化的时机

    JVM类加载过程 JVM类加载过程分为几个阶段,分别是加载.验证.准备.解析和初始化.加载是把二进制字节码载入内存,验证是校验字节流中包含的信息是否符合当要求,准备是为静态变量分配内存并设置静态变量初 ...

  5. 使用jieba分析小说太古神王中,男主更爱谁?去文章中找答案吧!#华为云·寻找黑马程序员#

    欢迎添加华为云小助手微信(微信号:HWCloud002 或 HWCloud003),输入关键字"加群",加入华为云线上技术讨论群:输入关键字"最新活动",获取华 ...

  6. 深度研究:回归模型评价指标R2_score

    回归模型的性能的评价指标主要有:RMSE(平方根误差).MAE(平均绝对误差).MSE(平均平方误差).R2_score.但是当量纲不同时,RMSE.MAE.MSE难以衡量模型效果好坏.这就需要用到R ...

  7. 小白探究UE4网络系列(一)、UE4网络基础类分析

    转载请标明出处:http://www.cnblogs.com/zblade/ 一.概要 捣鼓UE4也有两个多月了,从这儿开始,逐步探究UE4中经典的值复制,RPC两种同步方式.想要弄到其复制和调用的原 ...

  8. luogu P1417 烹调方案 |dp

    题目背景 由于你的帮助,火星只遭受了最小的损失.但gw懒得重建家园了,就造了一艘飞船飞向遥远的earth星.不过飞船飞到一半,gw发现了一个很严重的问题:肚子饿了~ gw还是会做饭的,于是拿出了储藏的 ...

  9. MyBatis—resultMap 的关联方式实现多表查询(多 对一)

    mapper 层 a)在 StudentMapper.xml 中定义多表连接查询 SQL 语句, 一次性查到需要的所有数据, 包括对应班级的信息. b)通过<resultMap>定义映射关 ...

  10. [TimLinux] Python Django myblog启动

    1. myblog介绍 自己给自己定的一个学习项目,用于: 使用学到的Python Web开发技术,框架django 使用学到的CSS技术,实现前端功能 使用学到的Axure工具,画出前端页面功能草图 ...