如何在Mathematica中绘制长度为n的三角形网格

3

我想知道是否有人能够帮忙在Mathematica中绘制一个边长为n的等边三角形网格。谢谢。

3个回答

5

一个简单的网格:

p = Table[ Table[

    Polygon[{j - 1/2 i, i Sqrt[3]/2} + # & /@ {{0, 0}, {1/2,Sqrt[3]/2}, {1, 0}}],

    {j, i, 9}], {i, 0, 9}];

Graphics[{EdgeForm[Black], FaceForm[White], p}]  

三角形网格

编辑

我猜这是一个更清晰的版本:

s3 = Sqrt[3];
templateTriangleVertex = {{0, 0}, {1, s3}, {2, 0}};

p = Table[Table[

    Polygon[{2 j - i, s3 i } + # & /@ templateTriangleVertex],

    {j, i, 9}], {i, 0, 9}];

Graphics[{EdgeForm[Black], FaceForm[White], p}]

非常感谢。这个简单多了。但是你有没有注意到,从视觉上看,这个网格不像Yaroslav画的那么“等边”。你知道为什么以及如何修复它吗? - Qiang Li
@Qiang 只需删除 AspectRatio->1(因为这只是一个显示问题)。我已经更新了我的答案。 - Dr. belisarius
太好了!你的回答非常简单,因此被选为我的问题的答案!谢谢! - Qiang Li

4

像这样的内容吗?


(来源: yaroslavvb.com)

这是我使用的代码。也许对于上面的特定任务来说过于复杂,它是我用来可视化整数点格子的代码,就像这个

A = Sqrt[2/3] {Cos[#], Sin[#], Sqrt[1/2]} & /@ 
    Table[Pi/2 + 2 Pi/3 + 2 k Pi/3, {k, 0, 2}] // Transpose;
p2r[{x_, y_, z_}] := Most[A.{x, y, z}];
n = 10;
types = 1/n Permutations /@ IntegerPartitions[n, {3}, Range[1, n]] // 
   Flatten[#, 1] &;
points = p2r /@ types;
Needs["ComputationalGeometry`"]
Graphics[{EdgeForm[Black], FaceForm[Transparent], 
  GraphicsComplex[points, 
   Polygon /@ DelaunayTriangulation[points // N][[All, 2]]]}]

这段代码的作用

  1. types包含所有三元组,这些三元组中的整数相加得到n。这些整数位于R^3的二维子空间中。
  2. A是一个线性变换,将这些三元组旋转到x-y平面上。
  3. Delauney三角剖分找到连接附近点的所有三角形。

看起来很不错。您能否简要解释一下这个想法? - Qiang Li

2

这是 belisarius 方法的一个变化。

p = Table[{2 j - i, Sqrt[3] i}, {i, 0, 9}, {j, i, 9}]

Graphics[ Line @ Join[p, Riffle @@@ Partition[p, 2, 1]] ]

顺便问一下,@belisarius,你是否喜欢使用双表格形式来提高清晰度? - Mr.Wizard
仅当用户参与了答案的评论线程或者他写了你正在评论的答案时,使用@user在你的消息中是有用的。如果他没有这样做,他将不会收到你的消息,可能根本不会阅读它。我只是浏览过去的答案而已。回答你的问题,有时候_适合我的情况下_,我选择以我认为对原始发布者(OP)更容易理解的方式编写代码,这并不总是我为自己编写代码的方式。最显著的例外可能是尝试解决性能问题时。 - Dr. belisarius
此外,如果您阅读了Qiang在我的回答中的最后一条评论,您会发现对于提问者来说,简单性往往是真正有价值的。如果我提出一个问题,我更看重一个简单易懂的答案,而不是花费数小时才能理解的答案...除非我正在研究某些东西,这个答案给了我思考的食粮。 - Dr. belisarius
我会尝试遵循你的建议。 - Mr.Wizard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接