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/ ...
随机推荐
- 本地搭建的gitbook添加导航折叠插件
如果有多个目录,Gitbook在浏览器上打开时,默认所有的目录都会打开,当目录比较多时,全部显示不利于阅读. 可以使用插件配置目录折叠,使得打开浏览器时这些目录默认是关闭的. 在执行gitbook i ...
- Android Application 详细介绍
一.先看看文档里怎么说 Base class for those who need to maintain global application state. You can provide your ...
- Nacos集群配置实例(windows下测试)
1.首先 fork 一份 nacos 的代码到自己的 github 库,然后把代码 clone 到本地. git地址:https://github.com/alibaba/nacos.git 2.然后 ...
- luogu P1336 最佳课题选择 |背包dp
题目描述 Matrix67要在下个月交给老师n篇论文,论文的内容可以从m个课题中选择.由于课题数有限,Matrix67不得不重复选择一些课题.完成不同课题的论文所花的时间不同.具体地说,对于某个课题i ...
- JMeter 实用插件配置
插件下载地址:链接 观察实时TPS,TRT,多用户负载图. 将 jpgc-graphs-dist-2.0.zip 解压缩至jmeter下的lib目录下,重启jmeter Transactions pe ...
- 这些C++常用内置函数你会几个??
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:Regina520 新手注意:如果你C++学的不好,可以去拿我的C+ ...
- Python3 函数进阶1
目录 闭包函数 什么是闭包函数 闭包函数的作用 装饰器 什么是装饰器 无参装饰器 有参装饰器 闭包函数 什么是闭包函数 闭包函数本质上就是函数嵌套和高阶函数 闭包函数的满足条件: 必须嵌套函数 内嵌函 ...
- 【spring boot】配置信息
======================================================================== 1.feign 超时配置 2.上传文件大小控制 3.J ...
- Xcode 三方库管理工具 CocoaPods 的安装流程
1. 移除现有 Ruby 默认源: $ gem sources --remove https://rubygems.org/ 2. 使用新的 Ruby 源: $ gem sources -a http ...
- Vue ---- 表单指令 条件指令 循环指令 分隔符 过滤器 计算属性 监听属性
目录 案例讲解: 一. 表单指令 1.重点: 补充 2.单选框 3.单一复选框 4.多复选框 二 . 条件指令 v-if/v-show ... v-clock 三 . 循环指令 string arra ...