三维图如何自动把遮挡的线用虚线表示?
mathematica吧
全部回复
仅看楼主
level 5
KeyTo9 楼主
我想做一个把立体图形旋转展示的gif图,图元结构不很复杂的。
希望每一帧的图能自动把遮挡的线用虚线表示,如图示。努力找过F1帮助无果,
不知有无内建的函数或者绘图指令, 我可不想做一个复杂的计算函数。。
唯有求助贴吧[玫瑰]
2019年10月20日 10点10分 1
吧务
level 12
据我所知没有直接的内置函数实现这功能,不过有判断区域是否相交的RegionIntersection,自己手写一个也不算太麻烦
lines = Table[{{i, Mod[i + 1, 4, 1]},
4 + {i, Mod[i + 1, 4, 1]}, {i, i + 4}}, {i, 4}]~Flatten~1~
Join~{{2, 8}, {4, 5}};
viewPoint = 10*{1.3, -2.4, 2};
pts0 = {{0, 0, 0}, {1, 0, 0}, {1, 1, 0}, {0, 1, 0}, {0, 0, 1}, {1, 0,
1}, {1, 1, 1}, {0, 1, 1}};
hiddenQ[point_, pts_] := Module[{hex = Hexahedron[pts], intersect},
intersect = RegionIntersection[Line[{point, viewPoint}], hex];
Head[intersect] === Line &&
EuclideanDistance @@ Chop@intersect[[1]] > 1*^-2]
plot[\[Theta]_] := Module[{pts, hex},
pts = RotationTransform[\[Theta], {0, 0, 1}, {1/2, 1/2, 0}][pts0];
hex = Hexahedron[pts];
Graphics3D[{If[hiddenQ[Mean[pts[[#]]], pts], Dashed, Nothing],
Thick, Line[pts[[#]]]} & /@ lines, ViewPoint -> viewPoint,
PlotRange -> {.8 {-1, 1} + 1/2, .8 {-1, 1} + 1/2, {0, 1.2}},
Boxed -> False]
]
Animate[plot[\[Theta]], {\[Theta], 0, 2 \[Pi]}]
2019年10月20日 16点10分 2

2019年10月20日 17点10分
十分感谢,做笔记&&研究中[我错了]
2019年10月21日 04点10分
优秀[呵呵][大拇指]
2019年10月24日 12点10分
[大拇指]
2020年02月06日 09点02分
level 8
[滑稽]我也来一个,图形随便复杂,加上Rasterize总能让图清晰。[勉强]
F[x_] := Animate[
With[{v = RotationTransform[\[Theta], {0, 0, 1}][5 {1, 1, 1}]},
Binarize@
Graphics3D[{EdgeForm[{Thick, Black}], FaceForm[], x},
Boxed -> False, ViewPoint -> v,
SphericalRegion -> True] + (Binarize[
Graphics3D[{EdgeForm[{Thick, Black}], x}, Boxed -> False,
ViewPoint -> v, SphericalRegion -> True,
Lighting -> {{"Ambient", White}}]] -
Binarize[
Graphics3D[{EdgeForm[{Thick, Black, Dashing[{0.02, 0.05}]}],
FaceForm[], x}, Boxed -> False, ViewPoint -> v,
SphericalRegion -> True]])], {\[Theta], 0, 2 Pi},
AnimationRunning -> False]
F[PolyhedronData["Dodecahedron", "GraphicsComplex"]]
2019年10月24日 14点10分 3
这个思路好[真棒]
2019年10月27日 10点10分
思路好神奇,不过我mathematica版本10,小改后是运行了,图像有点失真[真棒]
2019年10月28日 13点10分
@KeyTo9 二值华之前使用栅格化提高分辨率,但是估计分辨率太高就不流畅了。不过可以算完导出gif就完事了。[捂嘴笑][太开心][滑稽]
2019年10月28日 13点10分
Rasterize@Graphics3D...这样?试过了还是一样效果,锯齿感十足[扯花] 我猜是不是图像叠加时没准确对准相应的像素呢??我图像处理很陌生。楼下截图
2019年10月28日 14点10分
level 5
KeyTo9 楼主
mma10.3和小改楼上代码后(线条改为Thin,+,-用内置函数表达):
2019年10月28日 14点10分 4
和显卡也有关系,如果有独立显卡,尽可能设置为让MMA使用独立显卡。也可以尝试修改渲染选项,比如Graphics3D[{Cylinder[]},BaseStyle->RenderingOptions->{"3DRenderingMethod"->"BSPTree"}]
2019年10月29日 01点10分
你可以看一下栅格化的帮助嘛,里面可以设置图像大小和分辨率的,设置的高点就完事了。[捂嘴笑][阴险]
2019年10月29日 10点10分
吧务
level 13
Uncompress@
FromCharacterCode[
ToCharacterCode@"乑乚亅乪亘五乵乐井乳乐亚乡乱乴乳乺乘乡亇乵乭亃乡乣云井乥乥之事乘二于乭乐乸乧乭乵乵乶乶乧乸亓书乧亙亙乵亅亙乒互乹亏五乧乵亍乧乕乡乢亃亇亚井亗亍亚亖乢乩乶乢乬亃乲亘乗亓于于乶亁于乷乓于亐乖亅乓亍之乔书乗乶亂互乺乺乘互乭乧乢乣乥乴乵亗亅乶亂乤亂亃乘亙乓于乢亗亓乵井书亙乡二乕亃亙了乖乏乲乖亄亊乒乹亊五亅亚乖乷亊亇亁于乴乨乧争了乴乳乶乏乨买乹亘乨乏乳五于买亂亓亙之了书亏乭乮乨亘乹于乫互乘乗乐予乔互乢乏乨乶乓亇乥亃乘乑之乫乡亃乳乭事亅乱亓亓乣亗亂乸亂乴亚乵亓争乶乩亇亍乥于亖亏二亂乪亃乕乔乳五互乵乘亓亅亏乤亏亘二乲乹乮亖亓买亇之乒乐乳乮亃乩于亙亍乵五于乮亊亊乓乳亚买五予乴互乴乕乮亘亏乘互亏亊乳亄乑亗乪亗亍乴乥乲乳亁了亍乭亖乒予亖乯乪买亁井亃乲乺乧乩予乷亏乥于互井争乧乵争乫乵亁乯予乸亄亁亅乮乪乲亃亃乬乧乪乴了之乓予乣亏亗乸乴亘乸乘争乨二乒乧亊乒乵乺乡乘亏乹乥亃乯互亂争乏书买乶井乔乘亚亊乳予亄事乏乑亅乡乡亓乯云亍乨亁乫乑乫亗乘亖乥亄予乣乺亙乳乳云亂书乺了乹于乣亃亇亁乥乢乳乤乒乪乙二五二亃争亁乪乺之事亗乨乸亙于乘乸乨乬乫乳五乨互书乸争了乯乱亍乒亓乵乤乒乢亙乑亓亚乵亓乮于亚乩乳亗乕亃争乶乴乲买乙乕乶买乴亄亐乷乧乶于云亁五亓乖亖乯乭争亊乭乨乶乬乒事亚亁乢乷乨亙乩乳亙井乧乫乢乤亅乬之乓亁之乏亄乏亅乏亂乘乳乏乯亗亚乏乓书争互亄乹乐乣亇乲二予乬乶亊亐乒乯乤乳云亂予亃于乯亄亙乨乨乲乔亂乒亖亐井予亐亄乐亘乵于乣争亍乒乨乙云乓乸买于乧乙亄亍乧亇亐亂乑亊乨书云亃亐亚乹乒乨争乒亁乶亅亚乲书亊乳乢亐乓乸亘乗之二乓乙亇互乧乮乯乐乴亍亚乲乏乬乣亖亃乡乺买乙亗亍乥亇亊乯乨乫乯乫乏乱乭二乕乣乡乧亘乳了乏亙亘乬乏亏乒乲乲乒乏亗乥乮亓了亘井" - 20000]
2019年11月02日 15点11分 12
过分了.推测明文版本和5L相似,一起被安排了.
2019年11月03日 02点11分
@隨意超 这个防抽楼方法太6了哈哈哈
2019年11月03日 03点11分
@隨意超 被吞楼了?
2019年11月09日 16点11分
@氘化氢 6-13L除此层, 都仅自己可见
2019年11月10日 02点11分
1