Disegna un poligono regolare (massimo n = 12) con semicerchi su ogni lato, dipinto di nero
Devo disegnare un poligono regolare su n lati, n <13 per lato L, L <11 in cm. con semicerchi sui lati, completamente neri in modo tale da salvarlo come immagine xxx.png da stampare e ritagliare in seguito. L'importante è che le dimensioni sullo schermo in cm. sono identici all'immagine da ritagliare in seguito. Potresti aiutarmi. Ho visto diversi esempi nel forum, come questo, ma non riesco a trovare un modo per modificarlo. Allego una foto dell'idea. (Ma totalmente nera senza quadrati o bordi, su sfondo bianco)

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}}]]
Risposte
Un metodo ovvio sarebbe cucire insieme RegularPolygon[]
+ Disk[]
oggetti posizionati in modo appropriato , ma ciò di solito si tradurrebbe in cuciture indesiderate. Per evitare ciò, possiamo invece costruire un FilledCurve[]
oggetto dal risultato di CirclePoints[]
, utilizzando la rappresentazione NURBS di un semicerchio:
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]]]]]

Ecco l'approccio ingenuo, citato anche da JM (ma ne ha implementato un altro):
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}
si spera che se esporti questa grafica e la stampi, sarà grande x cm. Ho rimosso il riempimento dell'intervallo di trama perché altrimenti sarebbe stato conteggiato per la dimensione della figura. Il numero 72 entra perché, come documentato sotto ImageSize
, la dimensione della figura è data in punti della stampante .
Considerando la discussione qui , sembra che dovresti stare attento a stamparlo direttamente da Mathematica. L'approccio migliore sembra essere quello di esportarlo, ad esempio, in PDF e quindi stamparlo.
r = 12;
Graphics[{#, Disk[RegionCentroid @ #, r/2] & /@ MeshPrimitives[#, 1]}] & @
RegularPolygon[r, 6]
