WPF 3D 球面导览
基于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 球面导览的更多相关文章
- WPF 3D足球导览
根据博文:https://www.cnblogs.com/duel/p/regular3dpoints.html获取足球的3D坐标后,在每一个坐标位置创建一个ModelVisual3D元素,既能实现炫 ...
- JavaScript实现的3D球面标签云效果
这个效果都是由 FLASH 实现的,能不能由 JavaScript 实现呢? 我们也十分喜欢这个效果,就花了一些时间写出来了,如图所示: 效果预览点这里:http://www.miaov.com/mi ...
- WPF 3D model - Sphere, Cone, and Cylinder
原文:WPF 3D model - Sphere, Cone, and Cylinder Extending Visual3D - Sphere, Cone, and Cylinder http: ...
- WPF 3D 知识点大全以及实例
引言 现在物联网概念这么火,如果监控的信息能够实时在手机的客服端中以3D形式展示给我们,那种体验大家可以发挥自己的想象. 那生活中我们还有很多地方用到这些,如上图所示的Kinect 在医疗上的应用,当 ...
- 优化WPF 3D性能
Maximize WPF 3D Performance .NET Framework 4.5 As you use the Windows Presentation Foundation (WPF ...
- WindowsPhone开发—— 使用手绘图片做景区导览地图
前些日子在做景区App遇到需求,使用手绘图片做一个简易的地图,支持放大缩小平移以及显示景点Mark,安卓上可以使用一个叫做“mAppWidget”的开源库来完成,WP上有人建议用ArcGIS,但是考虑 ...
- js矩阵菜单或3D立体预览图片效果
js矩阵菜单或3D立体预览图片效果 下载地址: http://files.cnblogs.com/elves/js%E7%9F%A9%E9%98%B5%E8%8F%9C%E5%8D%95%E6%88% ...
- WPF 3D 小小小小引擎 - ·WPF 3D变换应用
原文:WPF 3D 小小小小引擎 - ·WPF 3D变换应用 WPF可以提供的3D模型使我们可以轻松地创建3D实体,虽然目前来看还很有一些性能上的问题,不过对于一些简单的3D应用应该是可取的,毕竟其开 ...
- 分享一个3D球面标签云
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
随机推荐
- LeetCode 5282. 转化为全零矩阵的最少反转次数
地址 https://leetcode-cn.com/submissions/detail/39277402/ 题目描述给你一个 m x n 的二进制矩阵 mat. 每一步,你可以选择一个单元格并将它 ...
- webpack 4.x 从零开始初始化一个vue项目
创建目录 项目名称: vue-init app css reset.sass js home index.vue router index.js main.js App.vue views index ...
- ruby传参之引用类型
ruby是完全面向对象语言,所有的变量所储存的,其实是对象的引用. 所以ruby方法的参数,也都是引用类型.即使是基本的类型,比如布尔,整数,小数等,也是一样. class MyObject attr ...
- 全面解析JVM加载中初始化的时机
JVM类加载过程 JVM类加载过程分为几个阶段,分别是加载.验证.准备.解析和初始化.加载是把二进制字节码载入内存,验证是校验字节流中包含的信息是否符合当要求,准备是为静态变量分配内存并设置静态变量初 ...
- 使用jieba分析小说太古神王中,男主更爱谁?去文章中找答案吧!#华为云·寻找黑马程序员#
欢迎添加华为云小助手微信(微信号:HWCloud002 或 HWCloud003),输入关键字"加群",加入华为云线上技术讨论群:输入关键字"最新活动",获取华 ...
- 深度研究:回归模型评价指标R2_score
回归模型的性能的评价指标主要有:RMSE(平方根误差).MAE(平均绝对误差).MSE(平均平方误差).R2_score.但是当量纲不同时,RMSE.MAE.MSE难以衡量模型效果好坏.这就需要用到R ...
- 小白探究UE4网络系列(一)、UE4网络基础类分析
转载请标明出处:http://www.cnblogs.com/zblade/ 一.概要 捣鼓UE4也有两个多月了,从这儿开始,逐步探究UE4中经典的值复制,RPC两种同步方式.想要弄到其复制和调用的原 ...
- luogu P1417 烹调方案 |dp
题目背景 由于你的帮助,火星只遭受了最小的损失.但gw懒得重建家园了,就造了一艘飞船飞向遥远的earth星.不过飞船飞到一半,gw发现了一个很严重的问题:肚子饿了~ gw还是会做饭的,于是拿出了储藏的 ...
- MyBatis—resultMap 的关联方式实现多表查询(多 对一)
mapper 层 a)在 StudentMapper.xml 中定义多表连接查询 SQL 语句, 一次性查到需要的所有数据, 包括对应班级的信息. b)通过<resultMap>定义映射关 ...
- [TimLinux] Python Django myblog启动
1. myblog介绍 自己给自己定的一个学习项目,用于: 使用学到的Python Web开发技术,框架django 使用学到的CSS技术,实现前端功能 使用学到的Axure工具,画出前端页面功能草图 ...