当前位置: 首页 > news >正文

数学图形之球面,椭球面,胶囊体,刺球

从这一节开始讲3D的数学图形,为此我准备了好久.这一节中将为你展示如何生成球面,椭球面,胶囊体,刺球,圆弧面.

相关软件参见:数学图形可视化工具,使用我自定义语法的脚本代码生成数学图形.

在我刚学计算机图形学的时候,就写过生成球面的程序,代码曾发布在球(Sphere)图形的生成算法.

球与圆很相关,一个是三维,一个是二维,可以参考下:圆,椭圆

 

(1)sphere的第一种写法

vertices = D1:100 D2:100

t = from 0 to (PI*2) D1
r = from 0 to 1 D2

x = 2*r*sin(t)*sqrt(1-r^2)
y = 2*r*cos(t)*sqrt(1-r^2)
z = 1-2*(r^2)

 

球的网格线:


(2)sphere的另两种写法

vertices = dimension1:36 dimension2:72
u = from 0 to (2*PI) dimension1
v = from (-PI*0.5) to (PI*0.5) dimension2
r = 10.0
x = r*cos(v)*sin(u)
y = r*sin(v)
z = r*cos(v)*cos(u)
vertices = dimension1:36 dimension2:72
u = from 0 to (2*PI) dimension1
v = from 0 to (PI) dimension2
r = 10.0
x = r*sin(v)*sin(u)
y = r*cos(v)
z = r*sin(v)*cos(u)

两种写法生成的图形是一样的

 


(3)彩色球

在脚本中给rgb变量设值,就能设置顶点色.

vertices = dimension1:72 dimension2:72

u = from 0 to (2*PI) dimension1
v = from (-PI*0.5) to (PI*0.5) dimension2

x = cos(v)*sin(u)
y = sin(v)
z = cos(v)*cos(u)

a = 10.0

r = (x+1.0)/2
g = (y+1.0)/2
b = (z+1.0)/2

x = a*x
y = a*y
z = a*z


(4)圆弧面

将球的第二维度范围减小,即得到圆弧面

vertices = dimension1:36 dimension2:72
u = from 0 to (2*PI) dimension1
v = from (PI*0.1) to (PI*0.5) dimension2
r = 10.0
x = r*cos(v)*sin(u)
y = r*sin(v)
z = r*cos(v)*cos(u)

 

(5)椭球面

#http://www.mathcurve.com/surfaces/ellipsoid/ellipsoid.shtml

vertices = D1:100 D2:100

u = from 0 to (2*PI) D1
v = from (-PI*0.5) to (PI*0.5) D2

a = rand2(1, 10)
b = rand2(1, 10)
c = rand2(1, 10)

x = a*cos(v)*sin(u)
y = b*sin(v)
z = c*cos(v)*cos(u)

 

(6)胶囊体

将球面向上下两头拉伸,即得到胶囊体,我也曾经写过胶囊体的生成算法胶囊体(Capsule)图形的生成算法

 

(7)刺球

将球面上顶点到球心的距离,有规律地变化,可以得到多变的球,如刺球

vertices = dimension1:129 dimension2:65

u = from 0 to (2*PI) dimension1
v = from (-PI*0.5) to (PI*0.5) dimension2

n =4

a = from 0 to 128 D1
b = from 0 to 64 D2

t = (mod(a, n) + mod(b, n))/n*4

r = 10.0 + t

x = r*cos(v)*sin(u)
y = r*sin(v)
z = r*cos(v)*cos(u)

相关文章:

  • contentType 'text/xml; charset=UTF-8' conflicts问题
  • Windows Azure创建管理数据库
  • 使用js操作cookie和浏览器关闭时删除指定cookie
  • 解决HTML5中placeholder属性兼容性的JQuery插件
  • C# 集合
  • WPF中查找控件的扩展类
  • 获取IP和mac地址
  • OSPF ProcessID(进程号)详解
  • D3js技术文档 可视化展现
  • 推荐一本HTML5实例书,小白也看得会的《HTML5网页开发实例详解》
  • 使用apache bench(ab)压力测试
  • 编写高性能Web应用程序的10个技巧
  • java使用httpcomponents发送get请求
  • 比较大气的网页元素
  • oracle sql developer 无法启动的解决办法
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • 【笔记】你不知道的JS读书笔记——Promise
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • ES6之路之模块详解
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • js正则,这点儿就够用了
  • Mac转Windows的拯救指南
  • Netty 4.1 源代码学习:线程模型
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • PHP的类修饰符与访问修饰符
  • SpiderData 2019年2月13日 DApp数据排行榜
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • zookeeper系列(七)实战分布式命名服务
  • 回流、重绘及其优化
  • 简单实现一个textarea自适应高度
  • 力扣(LeetCode)21
  • 使用 QuickBI 搭建酷炫可视化分析
  • 算法系列——算法入门之递归分而治之思想的实现
  • 学习使用ExpressJS 4.0中的新Router
  • 自制字幕遮挡器
  • 06-01 点餐小程序前台界面搭建
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • 通过调用文摘列表API获取文摘
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • (转)Linux下编译安装log4cxx
  • .gitignore文件---让git自动忽略指定文件
  • .NET Core 2.1路线图
  • .Net Core 中间件验签
  • .net 微服务 服务保护 自动重试 Polly
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)
  • .one4-V-XXXXXXXX勒索病毒数据怎么处理|数据解密恢复
  • /etc/apt/sources.list 和 /etc/apt/sources.list.d
  • [100天算法】-目标和(day 79)
  • [2021ICPC济南 L] Strange Series (Bell 数 多项式exp)