abbrechen
Suchergebnisse werden angezeigt für 
Stattdessen suchen nach 
Meintest du: 
abbrechen
Suchergebnisse werden angezeigt für 
Stattdessen suchen nach 
Meintest du: 
Programmierung
Alles über Programmierung in GDL und Python

Frage: Gleichmäßige Punkte-Aufteilung entlang Polygon

Hmooslechner
Moderator
Hat es von Euch schon mal jemand geschafft, entlang eines beliebigen Polygones (X-Y-Z-Ansammlungswerte) mit ungleichmäßigen Puntabständen einen "geometischen Zwilling" herzustellen, aber mit gleichmäßigen Punkte-Abständen?

Anwendungsfälle: Ketten, bessere Fassaden entlang Polygonen, Geländer, optisch schönere 2D-Polygon-Bereichsmarkierungen usw. usw.
AC5.5-AC27EduAut, PC-Win10, MacbookAirM1, MacbookM1Max, Win-I7+Nvidia
20 ANTWORTEN 20
Hmooslechner
Moderator
Hab mal ein Video gemacht, das zwar noch keine endgültige Lösung dieser Fragestellung bringt, diese aber verdeutlicht und Ihr könnt mir gewissermaßen dabei beim Denken zuhören:

(später wirds automatisch schärfer..)



https://www.youtube.com/watch?v=QlEyWlpm6pY

Zum Probieren und Mit-Denken:

AC27EduGer:
https://www.dropbox.com/scl/fi/7cerz5m0pcwm2wrz9gznq/Polygonzug-gleichm-ig-aufteilen-A.pln?rlkey=kev...
AC5.5-AC27EduAut, PC-Win10, MacbookAirM1, MacbookM1Max, Win-I7+Nvidia
xandros1
Newcomer
Als Zwischenergebnis:

In der Mitte kommt das gewünschte Ergebnis, allerdings nur so lange nur ein Segment kürzer ist als der Abstand. Sobald es mehr als ein Segment ist, passiert das, was du rechts im Bild siehst...

Hier der Codeschnipsel, der deine For-Schleife (to segments) in Zeile 152 ersetzt:
for i = 1 to segments

Segmentlaenge = hypotenuse2D[i]+fehlt

oftS = int(Segmentlaenge/Abstand)
iTemp = i

IF Segmentlaenge <= Abstand THEN
oftS = 1
iTemp = i + 1
fehlt = Abstand - (Abstand - Segmentlaenge)
ENDIF

for n = 1 to oftS

xp = (x[iTemp])+Abstand*n*cos(Alpha2D[iTemp]) - (fehlt*cos(Alpha2D[iTemp]))
yp = (y[iTemp])+Abstand*n*sin(Alpha2D[iTemp])- (fehlt*sin(Alpha2D[iTemp]))

circle2 xp, yp, 0.05
hotspot2 xp, yp

if n = oftS then

OftLG = Abstand * (oftS)
fehlt = Segmentlaenge - OftLG
Weiter = Abstand-fehlt


! circle2 x[i+1], y[i+1], fehlt
! circle2 x[i+1], y[i+1], Abstand
else
endif

next n






next i


mein nächster Ansatz wäre gewesen, irgendwie dieses iTemp mit einer Do-While Schleife auszurechnen (Variable: nWeiterePunkte), statt mit einem fixen Wert von 1. Habe das Gefühl, es geht in die richtige Richtung, bin aber damit krachend gescheitert 😄

Hier der Versuch, falls du dich damit auseinandersetzen magst:
	IF Segmentlaenge <= Abstand THEN
oftS = 1
nWeiterePunkte = 0
SegmentSumme = Segmentlaenge
DO
nWeiterePunkte = nWeiterePunkte + 1
SegmentSumme = SegmentSumme + hypotenuse2D[nWeiterePunkte]
nHypo = nHypo + hypotenuse2D[nWeiterePunkte]
WHILE SegmentSumme <= Abstand
iTemp = i + nWeiterePunkte - 1
fehlt = Abstand - (Abstand - (nHypo - hypotenuse2D[iTemp]))
TEXT2 0, 0, iTemp
ENDIF

AC 25 / 26, Voll, D / Intel i9-9900K, 64 GB RAM, nVidia GeForce RTX 2080 Ti, Win 10 x64
Hmooslechner
Moderator
Hab mir mal Deine Lösung auch angeschaut und mich hats damit auch zerbröselt.

Weitere Ansätze:

https://www.youtube.com/watch?v=Q6jgHoOIcDo




und nochmals anders über Loop der Abstände - so ähnlich, wie Du es mit do-While gemacht hast, aber mit if - then:

AC27EduGer:
https://www.dropbox.com/scl/fi/doi7zxeb1m9diltqna6w6/Polygonzug-gleichm-ig-aufteilen-B.pln?rlkey=u86...

https://www.youtube.com/watch?v=nhXc82JOM_8


AC5.5-AC27EduAut, PC-Win10, MacbookAirM1, MacbookM1Max, Win-I7+Nvidia
Hmooslechner
Moderator
Mal sehen, ob ich heute genug Zeit habe..

Jetzt prüft das letzte Programm für jeden Punkt, ob der "Abstand" (= Gleichmäßiger Aufteilungs-Abstand) kleiner ist als die Segmentlänge. Dies ist schon mal falsch. Damit schafft man es nur über ein Segment, aber nicht über mehrere, wenn der "Abstand" größer wird. Für kleinere Aufteilungen sicherlich schon mal ausreichend, aber ich will ja ein Script haben, dass "immer" funktioniert.

Das Programm müßte für jeden Punkt die Gesamtlänge bis 0 mit der Gesamtlänge des nächsten Polygonpunktes vergleichen - und immer den Ursprungspunkt und Winkel des nächstkleineren Polygonpunktes verwenden, um den nächsten zu errechnen. Es müßte erkennen, welcher Fehlbetrag im letzten Teil des Segmentes übrigbleibt und es als Weiterleitung ums Eck weitergeben.

All dies macht mein letztes Programm eh brav, nur prüft es eben nur ein Segment und nicht zurück bis ganz 0.
AC5.5-AC27EduAut, PC-Win10, MacbookAirM1, MacbookM1Max, Win-I7+Nvidia
Hmooslechner
Moderator
Ich denke, es gelöst zu haben! Film folgt.

https://www.dropbox.com/scl/fi/2235ldr1tat4cqnaxutcr/Polygonzug-gleichm-ig-aufteilen-C26.pln?rlkey=9...

Das war für mich mal wirklich eine "schweeeeeeeeere Geburt"... 😁




https://www.youtube.com/watch?v=kiEBDaeBzJ0
AC5.5-AC27EduAut, PC-Win10, MacbookAirM1, MacbookM1Max, Win-I7+Nvidia
Hmooslechner
Moderator
Ein erster Anwendungsversuch: Stab mit Durchhang - umbauen zu Ziegelteilung oder Kette:

https://www.youtube.com/watch?v=A53Rx87UPkY





Ac26EduAut:
https://www.dropbox.com/scl/fi/z2fm0m5mlakz75j4nsvau/Gleiche-Abst-nde-entlang-einer-senkrechten-Para...
AC5.5-AC27EduAut, PC-Win10, MacbookAirM1, MacbookM1Max, Win-I7+Nvidia
Hmooslechner
Moderator
Ziegelreihe entlang dieser Kurve:

https://www.youtube.com/watch?v=ytxr-m25MN0





AC26EduAut: https://www.dropbox.com/scl/fi/zg4fcppv3162fghv5eex1/Gleiche-Abst-nde-entlang-einer-senkrechten-Para...
AC5.5-AC27EduAut, PC-Win10, MacbookAirM1, MacbookM1Max, Win-I7+Nvidia
Hmooslechner
Moderator
Nun läuft auch die Kette:

https://www.dropbox.com/scl/fi/y1526771dmwg3ui9x66w3/Gleiche-Abst-nde-entlang-einer-senkrechten-Para...

https://www.youtube.com/watch?v=vITF0QLXLLI




to do:

Winkel der neuen Segmente direkt rechnen und nicht die Winkel der ursprünglichen Segmente verwenden, denn diese stimmen nur eingeschränkt, wenn die Abstände nicht zu sehr zum Ursprungspolygon variieren.
AC5.5-AC27EduAut, PC-Win10, MacbookAirM1, MacbookM1Max, Win-I7+Nvidia
Hmooslechner
Moderator
Die Ausrichtungswinkel der einzelnen elemente hatte ich vom Ursprungspolygon übernommen, aber dies führte zu PRoblemen, wenn die Neusegmente im Verhältnis zum Ursprungssegment zu groß wurden. Deshalb habe ich die Winkel nun vom Neupolygon übernommen.

https://www.dropbox.com/scl/fi/iy8fhurzhmgdukc9bsltr/Gleiche-Abst-nde-entlang-einer-senkrechten-Para...
AC5.5-AC27EduAut, PC-Win10, MacbookAirM1, MacbookM1Max, Win-I7+Nvidia