数学图形之Boy surface

这是一个姓Boy的人发现的,所以取名为Boy surface.该图形与罗马图形有点相似,都是三分的图形.它甚至可以说是由罗马曲面变化而成的.

本文将展示几种Boy曲面的生成算法和切图,使用自己定义语法的脚本代码生成数学图形.相关软件参见:数学图形可视化工具,该软件免费开源.QQ交流群: 367752815

In geometry, Boy's surface is an immersion of the real projective plane in 3-dimensional space found by Werner Boy in 1901 (he discovered it on assignment from David Hilbert to prove that the projective plane could not be immersed in 3-space). Unlike the Roman surface and the cross-cap, it has no singularities (i.e. pinch-points), but it does self-intersect.

 

boy surface 01

#http://www.mathcurve.com/surfaces/boy/boy.shtml
vertices = D1:100 D2:100
u = from 0 to (PI) D1
v = from 0 to (PI) D2
a = sin(u)
b = cos(u)
c = sin(v)
d = cos(v)
m = sqrt(2)
k = rand2(0.1, 1.4)
t = b/(m - k*sin(2*u)*cos(3*v))
x = t*(b*cos(2*v) + m*a*d)
y = t*(b*sin(2*v) - m*a*c)
z = 3*t*b

boy surface 02

#http://mathworld.wolfram.com/BoySurface.html

vertices = D1:100 D2:100
u = from (-PI/2) to (PI/2) D1
v = from 0 to PI D2a = SQRT2*pow(cos(v), 2)
d = 2 - SQRT2*sin(3*u)*sin(2*v)x = a*cos(2*u) + cos(u)*sin(2*v)
y = a*sin(2*u) - sin(u)*sin(2*v)
z = 3*pow(cos(v), 2)x = x/d
y = y/d
z = z/d

boy surface 03

我在这套公式上花费的时间最多,因为它最复杂,而且也不完美.它的曲面没能闭合.我研究了很久才发现,当r取无穷大时,该曲面才会闭合.

#http://www.ipfw.edu/departments/coas/depts/math/coffman/steinersurface.html
#x = (1+r^2*cos(t)^2)*(sqrt(2)-sqrt(2)*r^2*cos(t)^2+2*r*sin(t)) / (3*(1+r^2*cos(t)^2)*(1+r^2*cos(t)^2+r^2*sin(t)^2) + 3*sqrt(2)*r^2*cos(t)*sin(t)*(3-r^2*cos(t)^2))
#y = 2*(1+r^2*cos(t)^2)*(sqrt(2)*r*cos(t) - r^2*cos(t)*sin(t)) /  (3*(1+r^2*cos(t)^2)*(1+r^2*cos(t)^2+r^2*sin(t)^2) + 3*sqrt(2)*r^2*cos(t)*sin(t)*(3-r^2*cos(t)^2))
#z = (1+r^2*cos(t)^2)^2 / ((1+r^2*cos(t)^2)*(1+r^2*cos(t)^2+r^2*sin(t)^2) + sqrt(2)*r^2*cos(t)*sin(t)*(3-r^2*cos(t)^2))vertices = D1:100 D2:100
t = from 0 to (PI*2) D1
r = from 0 to 10 D2
c = cos(t)
s = sin(t)
i = (r*c) ^ 2
j = (r*s) ^ 2
m = sqrt(2)
a = (1+i)*(1+i+j)
b = m*r*r*c*s*(3-i)
x = (1+i)*(m-m*i+2*r*s) / (3*a + 3*b)
y = 2*(1+i)*(m*r*c - r*r*s*c) / (3*a + 3*b)
z = (1+i)*(1+i) / (a + b)

 

转载于:https://www.cnblogs.com/WhyEngine/p/3898580.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/376766.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开个定时器给echarts组件配置定时更新

我在js文件中开了个定时器,每1s从后端获取数据并解析,然后用异步方法就渲染不出来,改成同步就可以了。 这个解决方法来自于这篇文章,我出的问题和他一样:关于ajax中readyState的值一直为1的问题 这里将ajax参数修改为f…

SDK 操作 list-view control 实例 -- 遍历进程

遍历窗口,获得控件句柄 1 EnumChildWindows(hwndDlg, (WNDENUMPROC)EnumChildProc, NULL); 回调函数 1 BOOL CALLBACK EnumChildProc(HWND hwnd, LPARAM lParam )2 {3 char strCLSName[MAXBYTE] {0};4 GetClassName(hwnd, strCLSName, MAXBYTE);5 if (…

推荐一份不错的清除默认样式的CSS样式

时间过得真快,离 Reset CSS 研究(八卦篇) 已经 3 个多月了。废话少说,赶紧将技术篇写完吧。 回顾与反思 第一份 reset css 是 Tantek 的 undohtml.css, 很简单的代码,Tantek 根据自己的需要,对浏览器的默认…

python深浅拷贝

在python中,对象赋值实际上是对象的引用。当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用。 所以一个结构类型被赋给另外一个对象的时候,尽可能不使用 &#xff…

Flash中的SLC/MLC/MLC--基础

参考 1.http://www.upantool.com/jiaocheng/qita/2012/slc_mlc_tlc.html 2.http://www.2ic.cn/html/10/t-432410.html 3.http://kms.lenovots.com/kb/article.php?id15382 4.http://www.albertknight.com/222.html 5.http://ssd.zol.com.cn/371/3716632.html 6.这个图比较多 h…

python定义对象的比较方法

有时候我们需要比较两个对象。比如哪个对象大,哪个对象小。如果我们不告诉python如何比较,那么Python是不知道如何进行比较的。 下面提供实例 #__eq__(self,other): #在使用比较运算符比较两个对象是否相等的时候会调用这个方法。 #如果是相等,那么应该返…

关于Oracle Insert 语句的子查询 和 with check option的用法

今日睇ocp教程 发现 insert语句还可以子查询例如:INSERT INTO (SELECT employee_id, last_name, email, hire_date, job_id, salary, department_id FROM employees where department_id 50 )VALUES (9999…

apple mac 下使用机械键盘的办法,键盘映射工具软件,apple mac Mechanical keyboard

apple mac 下使用机械键盘的办法,键盘映射工具软件,apple mac Mechanical keyboard 想在苹果电脑 mac 系统下使用 机械键盘,大部分机械键盘不是为mac设计的,所以需要用软件做一下键盘映射。 推荐使用这个:https://pqrs…

Python中键映射多个值的方法:defaultdict

Python中键映射多个值的方法有两种: 想保持元素的插入顺序就应该使用列表; 想去掉重复元素就使用集合并且不关心元素的顺序问题的话应该使用set from collections import defaultdictmapping defaultdict(list)mapping [key].append(value)mapping d…

该不该让Google收录WordPress的目录页和标签页?

只要有一点SEO知识的 站长都会注意利用相关文件和元标签来控制Google对网站的收录,对于WordPress网站来说,除了我们主动添加的内容页面,Google还会收录目录归档页,标签归档页,时间归档页,以及作者归档页。这…

【原创】MapReduce编程系列之表连接

问题描述需要连接的表如下:其中左边是child,右边是parent,我们要做的是找出grandchild和grandparent的对应关系,为此需要进行表的连接。 Tom Lucy Tom Jim Lucy David Lucy Lili Jim Lilei Jim SuSan Lily Green Lily Bians Green…

python logging模块简单使用

logging 是线程安全的,也就是说,在一个进程内的多个线程同时往同一个文件写日志是安全的。 但是多个进程往同一个文件写日志不是安全的。 import loggingLOG_FORMAT "%(asctime)s - %(levelname)s - %(message)s" DATE_FORMAT "%m/%d/…

OpenACC 中parallel 和kernels的区别

Kernels构件 Kernels构件源于PGI Accelerator模型的region构件。嵌套kernels构件里的循环可能会被编译器转换成能在GPU上高效并行的部分。在这个过程中有三步。 1:判断并行中遇到的循环。 2:把抽象的并行转换成硬件上的并行。对于NVIDIA CUDA GPU&#…

ORACLE基本SQL语句-查询篇

一、普通查询 /*查询表数据*/select * from STU /*取出前3行数据*/select * from stu where ROWNUM<3 /*模糊查询*/select * from stu where stu_id like stu001% 说明&#xff1a;通配符“%”代表一个或者多个字符&#xff0c;通配符“_”代表一个字符。 /*别名*/select S…

三次握手建立失败的几种情况以及三次握手的理解

上面的图是阻塞式socket进行通信的过程&#xff0c;阻塞的时候是操作系统内核网络协议栈在工作 调用 connect 函数将激发 TCP 的三次握手过程&#xff0c;而且仅在连接建立成功或出错时才返回。其中出错返回可能有以下几种情况&#xff1a; 1、三次握手无法建立&#xff0c;客…

db_name,instance_name,service_names,db_domain,dbid,oracle_sid等区别与联系

最近整理了一篇文章&#xff1a;oracle listener 有网友对数据库是否显式设置了instance_name和service_names提出疑问。 由此引发出db_name,instance_name,oracle_sid等等这些常见的参数都代表什么意思&#xff0c;怎么取值的&#xff0c;有什么区别&#xff1f; SQL> sele…

检测版本更新

如果我们要检测app版本的更新&#xff0c;那么我们必须获取当前运行app版本的版本信息和appstore 上发布的最新版本的信息。 当前运行版本信息可以通过info.plist文件中的bundle version中获取&#xff1a; [cpp] view plaincopy NSDictionary *infoDic [[NSBundle mainBundle…

linux 启动/关闭多个py脚本

后台运行脚本 需求&#xff1a;很多时候我们会在 linux 服务器上执行 python 脚本&#xff0c;然而脚本程序执行的时间可能比较长&#xff0c;当耗时过长的情况下&#xff0c;我们使用 ssh 远程登录到 linux 服务器上容易造成超时自动断开连接&#xff0c;当用户注销时&#x…

在熟练使用2B铅笔前,请不要打开Axure

在互联网产品领域&#xff0c;Axure已成为产品经理、产品设计师以及交互设计师的必备工具&#xff0c;从某种程度讲&#xff0c;Axure帮助我们建立低保真模型&#xff0c;便于与用户的需求验证&#xff0c;也帮助我们构思交互细节&#xff0c;使前端和开发人员更容易理解我们的…

启用isqlplus

iSQL*Plus是sqlplus基于web方式发布的&#xff0c;要使用它只要在服务器上开启即可&#xff1a; [oraclelocalhost ~]$ isqlplusctl start perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LANGUAGE (unset), LC_ALL (unset)…