Ich möchte einige Regionen-Plots in eine Manipulate
-Struktur einfügen, jedoch ist das Rendering fast prohibitiv langsam. Der Code ist
Was Grafiken wie
erzeugt %Vor%
Das oben genannte dauert ungefähr 40 Sekunden, um auf meinem Computer zu berechnen und zu rendern. Kann jemand einen Weg vorschlagen, um Grafiken ähnlicher Qualität schneller zu erhalten?
Hinweis 1: Ich habe das Grafikobjekt notiert, so dass es nicht jedes Mal in meiner Demonstration neu berechnet werden muss - aber es ist selbst beim ersten Mal zu langsam.
Hinweis 2: Ich bin mit gerasterten Bildern zufrieden, daher könnte eine Lösung vom Typ "Flood Fill" eine Option sein ...
Hinweis 3: Ich brauche etwas wie Manipulate[
rplot[n, o], {n, 2, 10, 1, Appearance -> "Labeled"}, {{o, 1},
Range[1, (n + 1)/2], ControlType -> RadioButtonBar}]
, um verwendbar zu sein.
Ich habe das vorher als Ergänzung zu meiner anderen Antwort gepostet. Es ist inspiriert von Simons analytischem Ansatz, mit einigen Modifikationen, um die Dinge zu beschleunigen
%Vor% Zuerst benutze ich das für den gegebenen Wert von n
und o
, der Schnittbereich zwischen dem i
-th und i+o-1
-ten Kreis ist der selbe wie der Schnittbereich zwischen dem Der erste und o
-te Kreis außer einer Drehung über einen Winkel 2 Pi (i-1)/n
, es genügt also, die Region einmal zu berechnen und Rotate
zu verwenden, um die Region zu drehen.
Anstatt einen ParametricPlot zu verwenden, um die Schnittmenge zu plotten, verwende ich auch Polygon
, also muss ich nur einige Punkte auf der Grenze berechnen, was Zeit spart.
Das Ergebnis für GraphicsGrid[{{rplot2[3, 2], rplot2[5, 2]}, {rplot2[7, 3], rplot2[4, 1]}}]
sieht wie
Und die Zeitpunkte, die ich bekomme, sind
%Vor%im Vergleich zu denen für Simons Lösung
%Vor% Herr. Wizard machte mir klar, dass ich, obwohl ich ein analytisches Formular für die Bereiche hatte, die ich in RegionPlot
verwenden konnte, wenn ich ein parametrisiertes Formular für die Grenzen erhielt, dann ParametricPlot
verwenden könnte. Also, machen wir das!
Der Kreis i th ( i=0,...,n-1
) wird in der komplexen Ebene parametrisiert durch
Exp[I t] + Exp[2 i Pi I / n]
für t
in [0, 2 Pi]
.
Wir können den Schnittpunkt der Kreise i
th und (i+o-1)
th finden, wobei o
die Anzahl der Überlappungen ist, wie in der ursprüngliche Code der Frage. Dies gibt die Punkte bei
Nun können wir die Bogen vom Ursprung bis zu einem point[n,o,i]
parametrisieren und sie über die Linie vom Ursprung bis zum point[n,o,i]
reflektieren. Die Interpolation zwischen den beiden mit einem Parameter s
ergibt die parametrisierten Bereiche
Dann können wir
definieren %Vor% Und GraphicsGrid[{{rplot[3, 2], rplot[5, 3]}, {rplot[7, 2], rplot[4, 1]}}]
erzeugt
Wenn die Kreise immer wie dargestellt in einem geraden Ring angeordnet sind, sollte es eine analytische Lösung für den Kreis-Kreis-Schnittpunkt geben. Ich würde mit der Anzahl der Grade zwischen jedem Kreis anfangen, wie auf dem Ring ausgelegt.
Ich werde diese Methode erkunden, wenn die Zeit es erlaubt.
Binär rasterisiert eine Reihe von Festplatten an den richtigen Positionen
Ordnen Sie jedem Raster an Stelle von Einsen
Arrays hinzufügen
Berechnen Sie eindeutige Überlappungsmengen aus dem Wert an jedem Punkt im Summen-Array
Ordne die richtigen Farben dem resultierenden Array zu und erzeuge die Ausgabe
Erster grober Durchgang der Rastermethode, einfach als Proof of Concept. Sie können sehen, dass jede Region eine einzigartige Schattierung hat, die nur die Summe der Raster an diesem Punkt darstellt.
%Vor%
Zweiter Entwurf, Hinzufügen von Farben. Es ist immer noch ziemlich klobig.
%Vor%
Tags und Links wolfram-mathematica plot