Önemli not: Bu cevap vermez değil gerçek soruya cevap ama sol istek başına silinmemiş edildi. Utanç verici bir şekilde altı yüzlü ve altıgen karıştı. Soru, noktaları 3B'de rastgele altı yüzlü hücrelere ayırmakla ilgilidir , bu çözüm, 2B'de normal altıgen hücrelere veya herhangi bir boyuttaki bazı Voronoi tesselasyonuna karşılık gelen düzensiz hücrelere işaret eder. Bu yöntem yalnızca ağ ilk etapta bir Voronoi tesselasyonu olarak üretildiyse uygulanabilir (ki bu nadiren kullanılan bir yaklaşım gibi görünüyor ).
Burada sıralayarak ne demek istediğinizden emin değilim, ama noktayı uçaktaki altıgen kutulara ayırmak istediğinizi varsayıyorum.
Mathematica bildiğim şey, bu yüzden size Mathematica'da nasıl yapılacağını göstereceğim, ancak yöntem diğer sistemlere taşınabilir. Fikir, altıgen bir kafesin üçgen olanın ikisidir: üçgen düzenlemede bir noktanın Voronoi diyagramı olarak üretilebilir. Buluttaki bir nokta, herhangi bir altıgenin ortasına diğer altıgenin ortasından daha yakınsa belirli bir altıgene aittir.
Bu yöntem, bir nokta düzenlemesinin Voronoi diyagramı olarak üretilebildiği sürece farklı şekillerdeki kafesler için de çalışacaktır. (Örneğin altıgenlerin düzenli olması gerekmez.)
Kafes oluşturalım. Bu bir üçgen kafes:
pts = Join @@ Table[{x, Sqrt[3] y}, {x, 0, 4}, {y, 0, 2}];
points = Join[pts, TranslationTransform[{1/2, Sqrt[3]/2}] /@ pts];
Needs["ComputationalGeometry`"]
PlanarGraphPlot[points, LabelPoints -> False]
İkili, ilgilendiğimiz altıgentir:
DiagramPlot[points, LabelPoints -> False]
Bu, bir nf
bulut noktasının en yakın olduğu altıgen merkezin dizinini bulan bir işlev oluşturur . Yöntemin anahtarıdır:
nf = Nearest[N[points] -> Range@Length[points]];
Şimdi 1000 rastgele noktadan oluşan bir bulut oluşturalım ve bunları şu şekilde sıralayalım nf
:
cloud = RandomReal[{-1/2, 5}, {1000, 2}];
indices = First /@ nf /@ cloud;
indices
her bulut noktasının en yakın olduğu merkezlerin endekslerini içerir. İhtiyacımız olan bilgiler bu. Şimdi onlardan bir histogram yapabiliriz ...
Histogram[indices]
... ya da her birini boyayın ...
Show[
DiagramPlot[points, LabelPoints -> False],
Graphics@MapThread[{ColorData[3][#1], Point[#2]} &, {indices, cloud}],
PlotRange -> All, AspectRatio -> Automatic
]
... ya da istediğimiz her türlü fantezi görselleştirmeyi yapabiliriz.
tally = Tally[indices];
ListDensityPlot[Join[points, List /@ Sort[tally][[All, 2]], 2],
InterpolationOrder -> 0,
Epilog -> (Text[#2, points[[#1]]] & @@@ tally),
PlotRange -> {{-.5, 5}, {-.5, 5}}, Mesh -> All,
ColorFunction -> (ColorData["BeachColors"][1 - #] &)]
Burada kilit nokta, bir şeye ( Nearest
) en yakın noktayı bulan işlevdi . Mathematica'da yerleşik olarak bulunur, ancak sisteminizin bulunma ihtimali vardır. Bu durumda, lütfen böyle bir işlevi etkili bir şekilde nasıl uygulayacağınızla ilgili bu soruya bakın (veya sadece işlenecek çok fazla puanınız yoksa naif doğrusal zaman uygulamasına geçin).