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/ ...
随机推荐
- Centos Linux下使用Metasploit渗透android
.newline{display:block}.katex .base{position:relative;white-space:nowrap;width:min-content}.katex .b ...
- Python微信公众号教程基础篇——收发文本消息
1. 概述: 在本篇教程中,你将学会使用华为云弹性云服务器(以下简称 ECS)搭建微信公众号处理后台,使用Python语言编写对应的微信消息处理逻辑代码,接收从微信服务端转发过来的消息,并返回处理结果 ...
- shell 读取文件第几列
读取文件的第2列和第4列: cat filename.txt | awk '{ print $2 $4 }' 求文件file1.txt的第二列 和 file2.txt(单列文件)的交集: cat fi ...
- use dict in bash
declare -A animals=(["moo"]="cow" ["woof"]="dog") for sound ...
- es6 babel 安装以及使用
1,安装好node(需要使用npm包管理工具) 2,在本地项目路径下npm init,格式化成功后会在项目下生成一个配置文件package.json 3,本地安装bable npm install - ...
- 详解TCP连接的“三次握手”与“四次挥手”(下)
上文链接: 详解TCP连接的"三次握手"与"四次挥手"(上) 四.TCP的四次挥手(Four-Way Wavehand) 0.前言 对于"三次握手&q ...
- Geoserver2.15.1 配置自带 GeoWebCache 插件发布 ArcGIS Server 瓦片(附配置好的 Geoserver2.15.1 下载)
之前写过一篇关于 Geoserver2.8.5 版本的部署配置发布 ArcGIS Server 瓦片点击查看,那是下载 Geoserver2.8.5 源码编译,重新打包 jar 来部署配置思路的,版本 ...
- 【Webpack】320- Webpack4 入门手册(共 18 章)(下)
介绍 1. 背景 最近和部门老大,一起在研究团队[EFT - 前端新手村]的建设,目的在于:帮助新人快速了解和融入公司团队,帮助零基础新人学习和入门前端开发并且达到公司业务开发水平. 本文也是属于[E ...
- python爬虫--数据解析
数据解析 什么是数据解析及作用 概念:就是将一组数据中的局部数据进行提取 作用:来实现聚焦爬虫 数据解析的通用原理 标签定位 取文本或者属性 正则解析 正则回顾 单字符: . : 除换行以外所有字符 ...
- vue-cli3配置webpack generate-asset-plugin
最近尝试将vue项目中的后台URL抽离到打包后的配置文件中,看到有使用generate-asset-plugin在build时生成配置文件的做法,倒腾了一下午使该webpack plugin在vue- ...