Mehr

Wie zeige ich mit OpenLayers Polygonscheitelpunkte mit kleinen Kreisen an?

Wie zeige ich mit OpenLayers Polygonscheitelpunkte mit kleinen Kreisen an?


Ich nutze OpenLayers 3 und habe so ziemlich alles in meiner Anforderungsliste umgesetzt, außer eines: Ich werde irgendwie darum gebeten Lassen Sie das Polygon-Rendering die Polygon-Scheitelpunkte mit kleinen Kreisen anzeigen.

In einfachen Worten, der gewünschte Polygonumriss ist nicht nur eine Linie - es ist eine Linie, die an allen Stellen, an denen sich ein Scheitelpunkt befindet, mit kleinen Kreisen "geschmückt" ist.

Wie kann ich das in OL3 machen? Ich habe in den ol.style.Style-Dokumenten gesucht (das heißt, der Stil, den ich übergebesetStylezumol.layer.Vektormit meinen Polygonen), aber nichts relevantes gefunden.


Die freundlichen OL3-Entwickler haben die Antwort auf der GitHub-Problemliste bereitgestellt. Sie verwenden im Grunde die Geometriefunktion eines Stils, die die Geometrie vor dem Projizieren transformiert - und in dieser Funktion fügen Sie Ihre Scheitelpunkte zu einer MultiPoint-Geometrie hinzu. @tsauerwein ging so weit, eine funktionierende Geige zu schaffen - vielen Dank an ihn für seine Arbeit.

var styleFunction = function() { var image = new ol.style.Circle({ Radius: 5, Fill: null, Stroke: new ol.style.Stroke({color: 'orange', width: 2}) }); return [ new ol.style.Style({ Bild: Bild, Geometrie: function(feature) { varKoordinaten = feature.getGeometry().getCoordinates()[0]; return new ol.geom.MultiPoint(coordinates); } } ), new ol.style.Style({ Stroke: new ol.style.Stroke({ color: 'blue', width: 3 }), fill: new ol.style.Fill({ color: 'rgba(0, 0 , 255, 0.1)' }) }) ]; };

So zeichnen Sie regelmäßige Polygone im Mathematikmodus

Ich habe eine Reihenentwicklung, bei der jeder Term einem regelmäßigen Polygon zugeordnet werden kann. Ich möchte dies in einer Arbeit, die ich schreibe, anzeigen, indem ich eine Gleichung einfüge, die die Diagramme wie Terme im mathematischen Ausdruck behandelt. Ein Beispiel von dem, was ich im Sinn habe, ist unten gezeigt.

Es fällt mir schwer herauszufinden, wie das geht, insbesondere bei der Skalierung und Zentrierung der Polygone.

Besonders schön wäre eine Lösung, die vom arxiv-Compiler akzeptiert wird.


Teilen eines Polygons in gewünschter Weise

Ich habe viele Polygone. Ich möchte sie mit einer Linie teilen, die durch die Mitte verläuft und das Polygon in Bezug auf die Fläche in zwei gleiche Teile teilt. Ich finde keinen Anfangspunkt.

Hoffentlich klarere Erklärung des Problems:

Was ich habe, ist ein Haufen Polygone in 3D. Wie unten. Sie sind mehr oder weniger flache Polygone, die in 3 Dimensionen aufgehängt sind. Ich habe kartesische Koordinaten von jedem ihrer Scheitel. Jetzt möchte ich sie in zwei gleich große Stücke teilen. Die Linie kann in jede Richtung verlaufen und muss durch die Mitte des Polygons verlaufen, während sie flächenmäßig in zwei gleiche Teile geteilt wird.

Als Beispiel oben würde ein Polygon mit blauem Umriss, wenn es wie gewünscht geteilt wird, in etwa so aussehen

Mit einer durch die Mitte verlaufenden (schwarzen) Trennlinie (in rot) und einer flächenmäßigen Teilung des Polygons in zwei gleiche Hälften.

Über die Form der Polygone.
1. Jedes der Polygone ist flach oder die Eckpunkte jedes Polygons sind koplanar. 2. Jedoch befinden sich unterschiedliche Polygone auf unterschiedlichen Ebenen, stellen Sie sich diese Polygone als Kacheln vor, die eine Oberfläche bebauen 3. Die Fläche wird für jedes Polygon basierend auf seinen Eckpunkten berechnet, die alle auf derselben Ebene liegen. Sie können diese Eigenschaften der Polygone in der folgenden Form sehen. Für die Teilung ist jedes Polygon mit separaten Linien zu teilen. Die Trennlinie ist nicht die gleiche


Bei Polygonen nimmt die Länge jeder Seite mit zunehmender Seitenzahl ab

bei ∞ ist die Länge also gleich einem Punkt.

Es kann angenommen werden, dass jede Seite auf den Scheitelpunkt (dh einen Punkt) verkürzt ist.

Nun wird das Polygon zu einem Ort von Punkten, die eigentlich die Eckpunkte des Polygons sind.

Jeder Scheitelpunkt ist jedoch gleich weit vom Zentrum des Polygons entfernt, sodass das resultierende Polygon

wird zu einem Ort von Punkten, der von einem gemeinsamen Mittelpunkt, der ein Kreis ist, gleich weit entfernt ist.

Nach Bearbeiten: Es bleibt nun zu beweisen, dass bei n -> ∞ die Seitenlänge gegen Null geht, dh gegen einen Punkt.

Es kann durch Widerspruch bewiesen werden. 1) Angenommen bei n -> ist die Länge jeder Seite nicht gleich einem Punkt, sondern L. Für n -> ∞ ist die Gesamtlänge = n*L = ∞.

Nun ist die Gesamtlänge unendlich, jedoch ist das Polygon eine geschlossene Figur, also ist seine Gesamtlänge offensichtlich endlich.

Dies widerspricht also der unendlichen Länge, was wiederum unserer ursprünglichen Annahme widerspricht.

Daher geht bei n -> ∞ die Länge jeder Seite gegen 0, dh jede Seite wird zu einem Punkt.

Hier ist ein ernsthafter Ansatz: Sei $f_ncolon [0,2pi] o Bbb R_+$ die Funktion, deren Graph in Polarkoordinaten das reguläre $n$-Eck ist, das im Ursprung zentriert ist, mit einem Scheitelpunkt bei $(1,0)$. Dann konvergiert $(f_n)$ gleichförmig gegen eine konstante Funktion, die einen beliebigen Winkel auf $1$ abbildet, deren Graph ein Kreis ist.

Wir können uns auch die Grenze des Gebiets, à la Archimedes, und den Umfang ansehen.

Das regelmäßige Vieleck nähert sich dem Kreis in folgendem Sinne:

Alle Eckpunkte des Polygons sind an Der Kreis.

Der maximale Abstand des Polygons zum Kreis ist durch $2Rsin^2(frac<2n>)$ gegeben, der gegen Null geht, wenn $n$ zu $infty$ geht.

Hervorzuheben scheint, dass "immer mehr wie Kreise aussehen" zahlreiche Interpretationen zulässt. Die derzeit sichtbaren Antworten und Kommentare besagen, dass die Polygone auf verschiedene Weise zum Kreis konvergieren: Sie liegen schließlich innerhalb beliebig schmaler Ringe genau innerhalb des Kreises. Ihre Flächen konvergieren zur Fläche des Kreises. Ihre Umfänge konvergieren zum Umfang des Kreises. Man könnte zum Beispiel noch hinzufügen, dass für fast alle vom Ursprung ausgehenden Strahlen $R$ die Richtung, in der das $n$-Eck $R$ schneidet, gegen die Richtung konvergiert, in der der Kreis $R$ schneidet (nämlich senkrecht zu $R$). Das "fast" bezieht sich hier auf die Unannehmlichkeiten, die einige (abzählbar viele) $R

Ein zellbasierter Point-in-Polygon-Algorithmus, der für große Mengen von Punkten geeignet ist ☆

Das Papier beschreibt einen neuen Algorithmus zur Lösung des Point-in-Polygon-Problems. Es ist besonders geeignet, wenn überprüft werden soll, ob viele Punkte innerhalb oder außerhalb eines Polygons liegen. Der Algorithmus arbeitet in zwei Schritten. Zuerst wird ein Gitter von Zellen gleicher Größe erzeugt, und das Polygon wird auf dieses Gitter gelegt. Für die Zelldimensionierung wird ein heuristischer Ansatz vorgeschlagen. Die Zellen des Rasters werden als innerhalb, außerhalb oder am Polygonrand liegend markiert. Zur Zellklassifizierung wird ein modifizierter Flood-Fill-Algorithmus angewendet. Im zweiten Schritt werden die Punkte einzeln getestet. Wenn der getestete Punkt in eine innere oder eine äußere Zelle fällt, wird das Ergebnis ohne zusätzliche Berechnungen zurückgegeben. Wenn die Zelle den Polygonrand enthält, ist es möglich, die lokale Punktposition zu bestimmen. Die Analyse der Zeitkomplexität zeigt, dass die Initialisierung in der Zeit O(n n ) abgeschlossen ist, während die erwartete Zeitkomplexität für die Überprüfung eines einzelnen Punktes O( n ) ist, wobei n stellt die Anzahl der Polygonkanten dar. Der Algorithmus arbeitet mit Ö(n) Raumkomplexität. Der Beitrag liefert auch praktische Ergebnisse mit künstlichen und realen Polygonen aus einer GIS-Umgebung.


Zyklische Polygone und Trigonometrie

An einem Scheitelpunkt eines Fünfecks, das in einen Kreis von Einheitsdurchmesser (Einheitsdurchmesser, nicht Einheitsradius) eingeschrieben ist, seien die Winkel zwischen benachbarten Diagonalen $alpha,eta,gamma$, am nächsten $eta,gamma, delta$, beim nächsten $gamma,delta,varepsilon$, dann $delta,varepsilon,alpha$ und schließlich $varepsilon,alpha,eta$. Beachten Sie, dass $ alpha+eta+gamma+delta+varepsilon=pi. Etikett $ Spätere Anmerkung: (Um Missverständnisse zu vermeiden, beachten Sie, dass das, was ich oben geschrieben habe, für alle Fünfecke gilt, die in einen Kreis eingeschrieben sind. Winkel mit Scheitelpunkten auf dem Kreis haben das gleiche Maß, wenn sie von demselben Bogen umgeben sind. Folglich, wenn die drei Winkel zwischen benachbarten Diagonalen an einem Scheitel sind $alpha,eta,gamma$, in dieser Reihenfolge, dann müssen zwei der Winkel zwischen benachbarten Diagonalen an einem der benachbarten Scheitel $alpha$ und $eta$ sein, und zwei davon bei der andere benachbarte Scheitelpunkt muss $eta$ und $gamma$ sein. Und unabhängig von der Form des Fünfecks muss die Summe der fünf Winkel ein Halbkreis sein. Das ist eine allgemeine Aussage über Polygone, die in einen Kreis eingeschrieben sind , wenn es auf Dreiecke angewendet wird, sagt, dass die Summe der drei Winkel ein Halbkreis ist.) Ende der späteren Anmerkung

Es ist nicht schwer zu zeigen, dass die Fläche des Fünfecks $ frac<8>. ag <1>$ Es ist etwas aufwändiger zu zeigen, dass $(1)$ gleich $ frac 1 2 left( overbrace^ ext overbrace^ ext + cdots extcdots - overbrace<2sinalphasinetasingammasindeltasinvarepsilon>^ ext Rechts). $ (Es sollte offensichtlich sein, was die neun weiteren Terme sind: Wählen Sie drei Faktoren in jedem Term als Sinus und dann sind die anderen beiden Cosinus.)

(Soweit ich weiß, ist dies meine eigene. Ich habe es hier schon mindestens einmal erwähnt.)

Können die elf Begriffe als Bereiche interpretiert werden?

SPÄTER BEARBEITEN: Selbst für Vierecke erscheint es mysteriös. Wenn die Winkel zwischen benachbarten Diagonalen $alpha+eta+gamma+delta=pi$ sind und zwei davon an jedem Scheitelpunkt auftreten und jeder an zwei der vier Scheitelpunkte, dann ist die Fläche $ frac <8>= frac 1 2Big(overbrace^ ext overbrace^ ext+cdots ext< drei weitere Begriffe >cdotsBig) $

Du denkst vielleicht dass die vier Terme Flächen der vier Dreiecke sind, in die das Polygon durch die Diagonalen geteilt wird. Aber rate mal was?? Sie sind nicht! In ähnlicher Weise teilt das Pentagramm das Fünfeck in 11$-Dreiecke, und es gibt 11$-Begriffe auf der rechten Seite, aber sie entsprechen nicht den Flächen.


Wie bekomme ich runde Kanten, wenn ich mit einem Subsurface-Modifikator unterteile?

Im Bild sieht man scharfe Kanten, dieses Problem entstand, weil ich die ausgewählten Flächen mit einem Subsurface-Modifikator von 4 Unterteilungen unterteilt habe (Taste "W" dann Unterteilen).

Wie kann ich diese scharfen Kanten in runde Kanten umwandeln, wie bei einem "normalen" Untergrundmodifikator? Oder wie die Kanten eines Zylinders/einer Kugel.

HINWEIS: Ich brauche viele Polygon-Scheitelpunkte, weil ich einen "Verschiebungsmodifikator" habe. Vielleicht können Sie mir helfen, einen Weg für den Verschiebungsmodifikator (mit nicht vielen Polygonen) zu finden, anstatt diesen aufzulösen.

Smooth-Modifikator, das Ergebnis ist auf einem anderen Mesh gut, aber auch mit einem Fehler, aber in diesem funktioniert es nicht wie ich es erwartet habe.

Glatte Werkzeuge. Es ist ziemlich gut für meinen Displacement-Modifikator, aber es löst nicht die scharfen Kanten auf.

Was ich will, ist alles, was mit dem roten Kreis markiert ist (Die scharfen / harten Kanten) werden zu weichen Kanten wie die Oberfläche eines Zylinders.

Das Problem ist, dass ich wegen des Verschiebungsmodifikators unterteilen und den Subsurface-Modifikator benötige (ich brauche viele Polygone).


3 Antworten 3

Aus dem gegebenen rechtwinkligen Dreieck zwischen Kreismittelpunkten und Tangentialpunkt kopierter (regelmäßig fünfeckig berührender) Kreise

Sei $O$ ein Zentrum des Fünfecks. Sei $l$ ein Abstand von $O$ zu einem Scheitelpunkt. Ich hoffe du kannst es berechnen. Nenn es $l$.

Zeichnen Sie nun eine Sekante von $O$ durch diesen Scheitelpunkt. Seine Länge ist $l+1$ die Länge seines äußeren Teils ist $l-1$. Beachten Sie, dass der gesuchte Radius $r$ die Länge einer Tangente ist. Erinnern Sie sich an einen Satz, der diese drei Werte verbindet.

Eine schnelle Google-Suche liefert die Formel für das Apothem eines regelmäßigen Polygons, das die gesuchte Länge ist.


Das einzige regelmäßige Polygon, das Sie mit Scheitelpunkten auf dem ganzzahligen Standardgitter zeichnen können, ist leider das Quadrat. Ich werde nicht erklären, wie man das zeichnet!

Wir können genauso gut Polygone betrachten, die in der kartesischen Ebene mit Eckpunkten an rationalen Punkten gezeichnet sind, und wir können genauso gut den Mittelpunkt unseres Polygons als Ursprung nehmen. Seien $P$ und $Q$ benachbarte Ecken mit Positionsvektoren $v$ und $w$. Dann sagen wir $vcdot v=wcdot w=a$ und sagen $vcdot w=acos(2pi/n)=b$. Wir brauchen $a$ und $b$ um rational zu sein, also muss $cos(2pi/ n)$ rational sein. Aber $2cos(2pi /n)$ ist eine algebraische ganze Zahl, also muss es eine gewöhnliche ganze Zahl sein. Wir reduzieren auf die Fälle $n=3$, $4$ oder $6$.

Wenn wir ein regelmäßiges Sechseck in $mathbb . zeichnen können^2$ Wir können ein gleichseitiges Dreieck zeichnen, also konzentrieren wir uns darauf. Betten Sie unsere Ebene in den dreidimensionalen Raum ein und betrachten Sie das Vektorprodukt $vwedge w$. Dann ist $|vkeil w|^2=(vcdot v)(wcdot w)-(vcdot w)^2=a^2(1-cos^2pi/3) = frac34 a^2$. Aber $vwedge w$ ist ein rationales Vielfaches eines Einheitsvektors senkrecht zu unserer Ebene, also ist $|vwedge w|^2$ ein Quadrat einer rationalen. Hoppla!

Ich nehme an, man könnte sich gute Annäherungen an regelmäßige Polygone ansehen, die auf dem ganzzahligen Gitter gezeichnet sind, oder regelmäßige Polygone in ganzzahligen Gittern in Dimensionen $3$ oder mehr.


Ein neuartiges hybrides Informationssicherheitsschema für 2D-Vektorkarten

Information Hiding ist ein wesentliches Forschungsthema in der Theorie der hybriden Informationssicherheit. Die 2D-Vektorkarte enthält eine Fülle von hybriden Informationen, die eine Überprüfung der Authentizität und Integrität erfordern. Dieses Papier schlägt ein neuartiges hybrides Informationssicherheitsschema für 2D-Vektorkarten vor. Die Merkmale in der Vektorkarte werden zunächst in getrennte Gruppen unterteilt, um die Genauigkeit der Manipulationslokalisierung sicherzustellen. Um den Angriff zum Löschen von Batch-Features zu lokalisieren, entwickeln wir eine Feature-Gruppen-Korrelationstechnik basierend auf der Vertex-Einfügung. Und ein fragiles Wasserzeichen wird durch die Kombination mit Polarkoordinatentransformation und Hash-Funktion erzeugt, die robust gegenüber Rotations-, gleichmäßiger Skalierungs- und Translationsoperationen (RST) ist. Und wir betten das Wasserzeichen mit einer RST-invarianten Wasserzeichenmethode ein. Wir konstruieren zwei Datensätze für Experimente und die Ergebnisse im Vergleich zu früheren Methoden zeigen, dass das vorgeschlagene Schema eine gute Unsichtbarkeit und eine hohe Manipulationslokalisierungsgenauigkeit beim Hinzufügen und Löschen von Merkmalen aufweist.

Dies ist eine Vorschau von Abonnementinhalten, auf die Sie über Ihre Institution zugreifen können.


3 Antworten 3

Jede Kreuzung wird eindeutig einem Satz von $4$ verschiedenen Punkten zugeordnet. Daher $ = 70$ , was bedeutet, dass es $n=8$ Knoten gibt, und folglich gibt es $ = 28$ Diagonalen im Polygon.

Ich bin mir jedoch immer noch unsicher, warum die von mir verwendete Methode falsch ist. Könnte mir also jemand helfen zu verstehen, wo mein Denken fehlerhaft ist?

Das Problem ist, dass sich nicht alle Diagonalpaare schneiden. Wenn Sie beispielsweise ein konvexes Sechseck haben ABCDEF schneiden sich die Diagonalen AC und DF nicht

Dies scheint wie angegeben nicht möglich zu sein. Angenommen, das Polygon hat $m$ Scheitelpunkte. Jeder Scheitel liegt auf $m-3$-Diagonalen, wobei eine ihn mit jedem anderen Scheitel als sich selbst und seinen beiden Nachbarn verbindet. Das heißt, $m-3$ Diagonalen stimmen an jedem Scheitelpunkt überein. Wenn $m-3<3$ dann $mleq5$ . Ein Fünfeck hat $5$ Diagonalen, und für $inom n2geq70$ brauchen wir $ngeq13$ .

Vielleicht sollte das Problem lauten: »Keine drei sind gleichzeitig, außer an den Scheitelpunkten.« Nehmen Sie in diesem Fall an, dass das Polygon $m$ Scheitelpunkte hat und keine Diagonalen parallel sind. Dann hat das Polygon $d=frac2$ Diagonalen. Es gibt $inom d2$ Diagonalpaare, aber dies würde jeden Knoten $inom . zählen2$-mal, einmal für jedes Diagonalpaar, das es durchquert. Daher ist die Anzahl der Schnittpunkte $inom d2-mleft(inom2-1 ight)$ Die Einstellung von $m=7$ ergibt $56$ und die Einstellung von $m=8$ ergibt $118$ , also gibt es keine Lösung ohne parallele Diagonalen. In diesem Fall ist es schwierig, eine Lösung zu finden, geschweige denn zu zeigen, dass sie einzigartig ist.

Ich habe das Problem ursprünglich falsch gemacht. Ich sagte: "Jeder Scheitel wird $m-3$ mal gezählt, einmal für jede Diagonale, die ihn durchquert, so dass die Anzahl der Schnittpunkte $inom d2-m(m-4)$ ist." In diesem Fall gilt: Einstellung von $m=7$ ergibt $70$ .

Ich vermute, dass dies die beabsichtigte Lösung ist und dass derjenige, der das Problem verfasst hat, den gleichen Fehler gemacht hat wie ich.


Schau das Video: Openlayers 6 Tutorial #9 - Interaction With Vector Features