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/ ...
随机推荐
- input 输入框 只能输入数字、字母、汉字等
1.文本框只能输入数字代码(小数点也不能输入) <input onkeyup="this.value=this.value.replace(/\D/g,'')" onafte ...
- 大型情感剧集Selenium:8_selenium网页截图的四种方法
有时候,有时候,你会相信一切有尽头-当你的代码走到了尽头,那么保留最后一刻的状态尤为重要,此时你该如何操作?记录日志-没有将浏览器当前的状态进行截图来的直观! 那么,selenium截取截屏,有哪些方 ...
- luogu P2704 [NOI2001]炮兵阵地
题目描述 司令部的将军们打算在NM的网格地图上部署他们的炮兵部队.一个NM的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原(用"P" ...
- 信鸽推送Push API
目录 信鸽推送 push API 0. 基本 push 1. 根据 token list,推送到android和ios 2. 推送到android和ios 所有用户 信鸽推送 push API 参考: ...
- native-base中Input,Textarea等组件在ios平台下不能输入中文
在上文react-native中TextInput在ios平台下不能输入中文已经解决. 但是在native-base中Input和Textarea都存在这样的问题.为了不要写多个组件,封装以下代码: ...
- Spring Data-Spring整合Hibernate基于JPA规范
JPA:由 Sun 公司提供了一对对于持久层操作的标准(接口+文档) Hibernate:是 Gavin King 开发的一套对于持久层操作的自动的 ORM 框架. Hibernate JPA:是在 ...
- 2018 ACM/ICPC 南京 I题 Magic Potion
题解:最大流板题:增加两个源点,一个汇点.第一个源点到第二个源点连边,权为K,然后第一个源点再连其他点(英雄点)边权各为1,然后英雄和怪物之间按照所给连边(边权为1). 每个怪物连终点,边权为1: 参 ...
- Python学习笔记—自动化部署【新手必学】
前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:唯恋殊雨 目录 pexpect fabric pexpect P ...
- linux—netstat
netstat--option -a: 列出所有端口,监听的没有监听的 -t: 显示tcp相关的选项 -u: 显示udp相关的选项 -l: 仅仅显示监听选项 -p: 显示与连接有关的程序名和 ...
- 磁盘分区(GPT)
右击 我的电脑 → 管理 → 磁盘管理 (对磁盘1进行分区)右击 磁盘1 → 初始化 磁盘1 右击 磁盘1白色部分 → 新建磁盘分区 先创建主分区(主分区最多创建4个,扩展分区最多1个) 输入分区大小 ...