wayne 发表于 2018-12-29 10:22:30

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

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

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

要不,今天就来第一题,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是曲面,同样的数据情况下视觉上更平滑

wayne 发表于 2018-12-29 14:52:49

那我来抛砖引玉吧。新鲜出炉的Mathematica代码:

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}}};
ParametricPlot3D,{u,0,1},{v,0,1},Mesh->{{1,0.5}},MeshStyle->{Directive,Blue],Directive,Red]},Boxed->False,Axes->False,AspectRatio->1,Lighting->{{"Directional",Yellow,{10,10,10}}}]/.Line:>Tube
效果如下,感觉不论是光照,还是颜色,线条的细腻程度都不如 原题材




chyanog 发表于 2019-1-3 11:56:30

wayne兄谬赞了。
代码稍微改动了一下,效果也不算好。
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}}};

plt=ParametricPlot3D,{u,0,1},{v,0,1},Mesh->{{1,0.5}},MeshStyle->{Directive,Blue],Directive,Red]},Boxed->False,Axes->False,AspectRatio->Automatic,ViewPoint->{2.6,1.8,1.2},PlotStyle->RGBColor]/.Line:>Tube

(*Export["a.pdf",plt,ImageResolution->720]*)
页: [1]
查看完整版本: [编程擂台赛]--- Bezier Patch