数学研发论坛

 找回密码
 欢迎注册
查看: 740|回复: 7

[原创] [编程擂台赛]--- Bezier Patch

[复制链接]
发表于 2018-12-29 10:22:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?欢迎注册

x
最近关于SVG图片支持的讨论拉近了我跟Asymptote的距离,也让我意识到我的Mathematica技能因为长久没有磨炼出现了退化的情景了,chyanog的深厚功力一次又一次的震着我了,有要被震伤的节奏,于是我就想策划这个编程擂台赛,趁机学一把,嘿嘿。

打算做成一个系列。
1)编程题材:Asymptote官网的gallery里的例子:http://asymptote.sourceforge.net/gallery/
2)要求:不限编程语言,大家各显神通就行,旨在娱乐和技术交流,当然我预期可能会是大量的Mathematica代码的PK,感觉论坛懂Mathematica的人挺多的
3)唯一的小要求:要尽可能的复原gallery里的视觉效果,当然比gallery里的更好也可以,但是你总得说服我们为啥比原题材的效果更好吧,  
大家觉得怎么样?

要不,今天就来第一题,Bezier Patch
效果图:http://asymptote.sourceforge.net/gallery/BezierPatch.pdf
Asymptote代码:http://asymptote.sourceforge.net/gallery/BezierPatch.asy
-----------------
题目背景说明:
1)这是一个3D的曲面,所以没法生成SVG图片。后期题材是2D的话,大家最好以SVG格式提交效果图,因为可以节省论坛空间。
2)关于Bezier Patch,说两句。一般在计算机图形学领域,都是用三角形的面片来渲染曲面的,而Bezier Patch是曲面,同样的数据情况下视觉上更平滑
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2018-12-29 14:52:49 | 显示全部楼层
那我来抛砖引玉吧。新鲜出炉的Mathematica代码:

  1. pts={{{0,0,0},{1,0,0},{1,0,0},{2,0,0}},{{0,1,0},{1,0,1},{1,0,1},{2,1,0}},{{0,1,0},{1,0,-1},{1,0,-1},{2,1,0}},{{0,2,0},{1,2,0},{1,2,0},{2,2,0}}};
  2. ParametricPlot3D[BezierFunction[pts][u,v],{u,0,1},{v,0,1},Mesh->{{1,0.5}},MeshStyle->{Directive[Thickness[.01],Blue],Directive[Thickness[.01],Red]},Boxed->False,Axes->False,AspectRatio->1,Lighting->{{"Directional",Yellow,{10,10,10}}}]/.Line:>Tube
复制代码

效果如下,感觉不论是光照,还是颜色,线条的细腻程度都不如 原题材
Screenshot_2018-12-29_15-03-43.png
a.svg (47.87 KB, 下载次数: 3)

点评

图片不错  发表于 2019-1-3 13:43
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2019-1-3 11:56:30 | 显示全部楼层
wayne兄谬赞了。
代码稍微改动了一下,效果也不算好。
  1. pts={{{0,0,0},{1,0,0},{1,0,0},{2,0,0}},{{0,1,0},{1,0,1},{1,0,1},{2,1,0}},{{0,1,0},{1,0,-1},{1,0,-1},{2,1,0}},{{0,2,0},{1,2,0},{1,2,0},{2,2,0}}};

  2. plt=ParametricPlot3D[BezierFunction[pts][u,v],{u,0,1},{v,0,1},Mesh->{{1,0.5}},MeshStyle->{Directive[Thickness[0.01],Blue],Directive[Thickness[.01],Red]},Boxed->False,Axes->False,AspectRatio->Automatic,ViewPoint->{2.6,1.8,1.2},PlotStyle->RGBColor[0.67,0.8,0.]]/.Line:>Tube

  3. (*Export["a.pdf",plt,ImageResolution->720]*)
复制代码

点评

效果好多了,:)  发表于 2019-1-3 14:53
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2019-12-13 04:52 , Processed in 0.166197 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表