Q94:怎么用ray tracing画部分圆环(Part Tori)
来源:互联网 发布:猴王开心水果源码php 编辑:程序博客网 时间:2024/05/16 18:51
这一章节的内容和“问题四十二”有点类似,或者说有点重复。
“问题四十二”的链接:http://blog.csdn.net/libing_zeng/article/details/54563752
但是,“问题四十二”中只能画圆环的片段,类似于如下图形:
我们现在要画的部分圆环图形类似于:
这种“部分圆环”,加上坐标轴,大概是这个样子:
为了画这种部分圆环,我们引入四个参数:phi1、phi2、theta1、theta2
phi1、phi2用来将圆环“切断”(和“问题四十二”是一样的);
theta1、theta2是用来将圆环“切开”。
理论分析
将圆环“切断”
具体做法:
1,将撞击点p投影到xoz平面,投影点为p';
2,op'和+x轴的夹角即为phi;
3,判断phi是否在[phi1,phi2]区间内。
将圆环“切开”
具体做法:
C++代码实现
核心代码截图如下:
测试图形
大半径2,小半径0.5,phi1=0度,phi2=270度,theta1=90度,theta2=360度
大半径2,小半径0.5,phi1=0度,phi2=360度,theta1=270度,theta2=360度
将如上图形中的法向量取反(对应的就是concave版本的圆环了)
其他说明
完整代码:(下载链接在下方评论中)
Referrance:
[1]. Kevin Suffern, Ray Tracing from theGround Up, A K Peters Ltd, 2007.
4 0
- Q94:怎么用ray tracing画部分圆环(Part Tori)
- 问题三十九:怎么用ray tracing画圆环
- 问题四十二:怎么用ray tracing画任意圆环片段
- 问题四十九:怎么用ray tracing画supertoroid(超级圆环)
- 问题四十四:怎么用ray tracing画空间任意位置的圆环的任意片段
- 问题十二:怎么用ray tracing画第一张图
- 问题四十六:怎么用ray tracing画superellipsoid
- 问题四十七:怎么用ray tracing画superellipsoid (2)
- 问题五十:怎么用ray tracing画blobs
- 问题五十一:怎么用ray tracing画tear drop
- 问题五十七:怎么用ray tracing画translational sweeping图形
- 问题五十八:怎么用ray tracing画conic sweeping图形
- 问题六十三:怎么用ray tracing画sphere sweeping图形
- 问题三十二:怎么用ray tracing画多边形(polygon, triangle)
- 问题三十三:怎么用ray tracing画特殊长方体(box)
- 问题三十四:怎么用ray tracing画任意长方体(generalized box)
- 问题三十五: 怎么用ray tracing画二次曲面(quadratic surfaces)(1)——椭球面
- 问题三十五: 怎么用ray tracing画二次曲面(quadratic surfaces)(3)——椭球抛物面
- javascript 实现快排的两种方法 和sort()的比较,以及效率
- 求最大公约数与最小公倍数
- 步进电机原理
- AES,MD5,RSA,SHA系列等各类加密解读
- Git个别理解
- Q94:怎么用ray tracing画部分圆环(Part Tori)
- [Bootkit]开源Bootkit技术(三)vBootkit
- 一个小巧好用的个人知识管理系统-TiddlyWiki.
- Python-内置数据类型
- div和section有什么区别?在加一个article标签
- python opencv -详解hough变换检测直线与圆
- JAVA学习第五天
- 冒泡排序的优化
- Tomcat安装目录下每个文件夹的功能和作用