両側に半円があり、黒く塗られた正多角形(最大n = 12)を描画します
n辺に正多角形を描く必要があります。辺Lの場合はn <13、L <11はcmです。側面に半円があり、後で印刷して切り取るためにxxx.png画像として保存するように完全に黒になっています。重要なのは、画面上の寸法がcm単位であるということです。後でトリミングする画像と同じです。私たちを手伝ってくれますか。このような例をフォーラムでいくつか見ましたが、変更する方法が見つかりません。アイデアの写真を添付します(ただし、白い背景に、正方形や境界線のない完全な黒)

L = 12;
Graphics[Line[{{L, 0}, {L/2, L Sqrt[3]/2}, {-L/2, L Sqrt[3]/2}, {-L,
0}, {-L/2, -L Sqrt[3]/2}, {L/2, -L Sqrt[3]/2}, {L, 0}}]]
回答
明らかな方法は、オブジェクトをつなぎ合わせてRegularPolygon[]
適切に配置Disk[]
することですが、通常は不要な継ぎ目が発生します。これを回避するために、代わりに、半円のNURBS表現を使用してFilledCurve[]
、の結果からオブジェクトを作成できますCirclePoints[]
。
With[{r = 2, θ = π/2, n = 7},
Graphics[FilledCurve[MapIndexed[With[{d = (EuclideanDistance @@ #1)
Normalize[Cross[Subtract @@ #1]]/2},
BSplineCurve[If[#2 === {1}, Identity, Rest]
[{#1[[1]], #1[[1]] + d,
#1[[2]] + d, #1[[2]]}],
SplineDegree -> 2,
SplineKnots -> {0, 0, 0, 1/2,
1, 1, 1},
SplineWeights -> {1, 1/2,
1/2, 1}]] &,
Partition[N[CirclePoints[{r, θ}, n]], 2, 1, 2]]]]]

これは、JMによっても言及されている素朴なアプローチです(しかし、彼は別のアプローチを実装しました):
draw[n_, {w_, h_}] := Module[{pts, segments, midPoints, lengths},
pts = With[{ipts = CirclePoints[n]}, Append[ipts, First[ipts]]];
segments = Partition[pts, 2, 1];
midPoints = Mean /@ segments;
lengths = Norm[First[#] - Last[#]] & /@ segments;
Graphics[{
MapThread[Disk, {midPoints, lengths/2}],
Polygon[pts]
},
ImageSize -> (72/2.54) {w, h},
PlotRangePadding -> 0
]
]
draw[7, {10, 10}]

ImageSize -> (72/2.54) {w, h}
うまくいけば、このグラフィックをエクスポートして印刷すると、wxhセンチメートルの大きさになります。プロット範囲のパディングを削除しました。そうしないと、図のサイズにカウントされるためです。で説明されているようにImageSize
、図のサイズがプリンタのポイントで示されているため、72という数字が入ります。
ここでの議論を考えると、Mathematicaから直接印刷することに注意する必要があるようです。より良いアプローチは、PDFなどにエクスポートしてから印刷することです。
r = 12;
Graphics[{#, Disk[RegionCentroid @ #, r/2] & /@ MeshPrimitives[#, 1]}] & @
RegularPolygon[r, 6]
