Hallo Python Gemeinde,
ich versuche momentan einen Kreisbogen zu definieren. Ich habe einen festen Anfangs- und Endpunkt für den Bogen gegeben und muss nun den geeigneten Mittelpunkt dazu finden. Die Berechnung des Mittelpunktes (origin) soll über einen Winkel und Radius des Kreisauschnittes definiert sein. Um den origin point dann richtig zu setzen, muss ich die Koordinaten berechnen. Kennt jemand eine Art mathematische Funktion, wo Winkel und/oder Raduis variabel sind und ich auf die Koordinaten des Mittelpunktes schließen kann?
C#
# Drei-Punkt-Bogen skizzieren
origin = Point2D.Create(MM(-2428.67745342585), MM(1373.63100108961))
start = Point2D.Create(MM(197.20092520994), MM(62.9348480282863))
end = Point2D.Create(MM(468.860228524157), MM(907.329546324058))
result = SketchArc.Create(origin, start, end)
# EndBlock
Vielen Dank im Voraus.
Gruß Jo
Kreisbogen über winkel und Radius definieren
- noisefloor
- User
- Beiträge: 3829
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
wenn du nur zwei Punkte hast, dann ist das ganze unterbestimmt und es gibt unendliche viele Lösungen. Du brauchst noch eine weitere Angabe, damit das eindeutig lösbar ist.
Gruß, noisefloor
wenn du nur zwei Punkte hast, dann ist das ganze unterbestimmt und es gibt unendliche viele Lösungen. Du brauchst noch eine weitere Angabe, damit das eindeutig lösbar ist.
Gruß, noisefloor
Hallo,
danke für die Antwort.
Genau ich habe zwei Punkte fix. Den Startpunkt und den Endpunkt. Mir fehlt also noch die Definition des origin(Mittel) Punktes. Dieser Punkt darf aber Variabel sein, d.h. er ist abhängig von der Bogenlänge, dem Winkel und dem Radius. In meiner Syntax muss ich jedoch Koordinaten des Mittelpunktes angeben. Jetzt stellt sich mir die Frage, ob es eine mathematische Beziehung gibt, wie man anhand Radius/Winkel/Bogenlänge die Koordinaten des Mittelpunktes bestimmen kann.
danke für die Antwort.
Genau ich habe zwei Punkte fix. Den Startpunkt und den Endpunkt. Mir fehlt also noch die Definition des origin(Mittel) Punktes. Dieser Punkt darf aber Variabel sein, d.h. er ist abhängig von der Bogenlänge, dem Winkel und dem Radius. In meiner Syntax muss ich jedoch Koordinaten des Mittelpunktes angeben. Jetzt stellt sich mir die Frage, ob es eine mathematische Beziehung gibt, wie man anhand Radius/Winkel/Bogenlänge die Koordinaten des Mittelpunktes bestimmen kann.
Na Radius zb ist doch trivial. Das ist ja der Schnittpunkt der zwei Kreise in dem Radius um die gegebenen Punkte rum. Und Kreisschnitt kann man sich mal ergoogeln.
Wobei da ja zwei Ergebnisse kommen. Da musst du auch noch disambiguieren.
Winkel ist Gradenschnitt - zwei Graden von den Punkten, die sich schneiden und den gegebenen Winkel haben. Auch hier wieder zwei Ergebnisse.
Bogenlänge fällt mir noch nix zu ein.
Wobei da ja zwei Ergebnisse kommen. Da musst du auch noch disambiguieren.
Winkel ist Gradenschnitt - zwei Graden von den Punkten, die sich schneiden und den gegebenen Winkel haben. Auch hier wieder zwei Ergebnisse.
Bogenlänge fällt mir noch nix zu ein.
Hallo zusammen,
https://www.google.de/search?q=kreisbog ... 8BO9_NRF3M:
Das zb wäre der Kreisbogen den ich suche bzw. ja Kreisausschnitt. Die Außenpunkte sind fix. Der Cords vom Mittelpunkt bleiben ja normalerweise in Abhängigkeit des Radius bzw. dem Winkel..Je nachdem wie "gebogen oder flach" der Kreisbogen ausfallen soll. Und diese Beziehung suche ich, sprich Cords-Mittelpunkt zu Winkel/Radius
Gruß Jo
https://www.google.de/search?q=kreisbog ... 8BO9_NRF3M:
Das zb wäre der Kreisbogen den ich suche bzw. ja Kreisausschnitt. Die Außenpunkte sind fix. Der Cords vom Mittelpunkt bleiben ja normalerweise in Abhängigkeit des Radius bzw. dem Winkel..Je nachdem wie "gebogen oder flach" der Kreisbogen ausfallen soll. Und diese Beziehung suche ich, sprich Cords-Mittelpunkt zu Winkel/Radius
Gruß Jo
- noisefloor
- User
- Beiträge: 3829
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
@ttschj: das Ergebnis ist aber nicht eindeutig - wie __deets__ schon sagte, gibt es zwe mögilche Ergebnisse. Der Kreisbogen kann ja in zwei Richtungen "ausgebeult" sein. Da kannst das ja alles quasi entlange der Geraden durch die beiden Punkte spiegeln.
Eindeutig wird es IMHO nur, wenn du noch ein Tangente für den Kreisbogen hast, weil dann die "Richtung" des Kreisbogens festgelegt ist. Ist mir aber gerade zu kompliziert, darüber nachzudenken
Gruß, noisefloor
@ttschj: das Ergebnis ist aber nicht eindeutig - wie __deets__ schon sagte, gibt es zwe mögilche Ergebnisse. Der Kreisbogen kann ja in zwei Richtungen "ausgebeult" sein. Da kannst das ja alles quasi entlange der Geraden durch die beiden Punkte spiegeln.
Eindeutig wird es IMHO nur, wenn du noch ein Tangente für den Kreisbogen hast, weil dann die "Richtung" des Kreisbogens festgelegt ist. Ist mir aber gerade zu kompliziert, darüber nachzudenken
Gruß, noisefloor
Hallo zusammen,
habe die Lösung berechnen können. Der Ansatz für M = AB/2 + lambda*v... Falls jemand an der Rechnung interessiert ist kann er sich gerne melden.
Nun kann man die Scheibe über drei Längen, Winkel und abgerundeten Radius definieren.
Meine Syntax sieht aktuell so aus:
Laenge_1 = 872
Laenge_2 = 588
Laenge_3 = 307
Radius = 1761
alpha = 0.280998
beta = 0.3089233
# Create Datum Plane
selection = Selection.Create(Axis1)
result = DatumPlaneCreator.Create(selection, False, Info1)
# Change Section View
sectionPlane = Plane.PlaneZX
result = ViewHelper.SetSketchPlane(sectionPlane, Info2)
# Linie skizzieren Linie 1
start = Point2D.Create(MM(0), MM(0))
end = Point2D.Create(MM(0), MM(Laenge_1))
result = SketchLine.Create(start, end)
# Linie skizzieren Linie 2
start = Point2D.Create(MM(0), MM(Laenge_1))
end = Point2D.Create(MM(0+cos(alpha)*Laenge_2), MM(Laenge_1+sin(alpha)*Laenge_2))
result = SketchLine.Create(start, end)
# Linie skizzieren Linie 3
start = Point2D.Create(MM(0), MM(0))
end = Point2D.Create(MM(0+cos(beta)*Laenge_3), MM(0+sin(beta)*Laenge_3))
result = SketchLine.Create(start, end)
x_1 = (0+sin(beta)*Laenge_3) #A_x
y_1 = (0+cos(beta)*Laenge_3) #A_y
x_2 = (Laenge_1+sin(alpha)*Laenge_2) #B_x
y_2 = (0+cos(alpha)*Laenge_2) #B_y
lam = math.sqrt((Radius**2-0.25*((x_2-x_1)**2+(y_2-y_1)**2))/((-y_2+y_1)**2+(x_2-x_1)**2))
# Drei-Punkt-Bogen skizzieren Linie 4 ############################# Arc
origin = Point2D.Create(MM(((y_1+y_2)/2)-(lam*(x_2-x_1))), MM(((x_1+x_2)/2)-(lam*(-y_2+y_1))))
start = Point2D.Create(MM(0+cos(beta)*Laenge_3), MM(0+sin(beta)*Laenge_3))
end = Point2D.Create(MM(0+cos(alpha)*Laenge_2), MM(Laenge_1+sin(alpha)*Laenge_2))
result = SketchArc.Create(origin, start, end)
Gruß Jo
habe die Lösung berechnen können. Der Ansatz für M = AB/2 + lambda*v... Falls jemand an der Rechnung interessiert ist kann er sich gerne melden.
Nun kann man die Scheibe über drei Längen, Winkel und abgerundeten Radius definieren.
Meine Syntax sieht aktuell so aus:
Laenge_1 = 872
Laenge_2 = 588
Laenge_3 = 307
Radius = 1761
alpha = 0.280998
beta = 0.3089233
# Create Datum Plane
selection = Selection.Create(Axis1)
result = DatumPlaneCreator.Create(selection, False, Info1)
# Change Section View
sectionPlane = Plane.PlaneZX
result = ViewHelper.SetSketchPlane(sectionPlane, Info2)
# Linie skizzieren Linie 1
start = Point2D.Create(MM(0), MM(0))
end = Point2D.Create(MM(0), MM(Laenge_1))
result = SketchLine.Create(start, end)
# Linie skizzieren Linie 2
start = Point2D.Create(MM(0), MM(Laenge_1))
end = Point2D.Create(MM(0+cos(alpha)*Laenge_2), MM(Laenge_1+sin(alpha)*Laenge_2))
result = SketchLine.Create(start, end)
# Linie skizzieren Linie 3
start = Point2D.Create(MM(0), MM(0))
end = Point2D.Create(MM(0+cos(beta)*Laenge_3), MM(0+sin(beta)*Laenge_3))
result = SketchLine.Create(start, end)
x_1 = (0+sin(beta)*Laenge_3) #A_x
y_1 = (0+cos(beta)*Laenge_3) #A_y
x_2 = (Laenge_1+sin(alpha)*Laenge_2) #B_x
y_2 = (0+cos(alpha)*Laenge_2) #B_y
lam = math.sqrt((Radius**2-0.25*((x_2-x_1)**2+(y_2-y_1)**2))/((-y_2+y_1)**2+(x_2-x_1)**2))
# Drei-Punkt-Bogen skizzieren Linie 4 ############################# Arc
origin = Point2D.Create(MM(((y_1+y_2)/2)-(lam*(x_2-x_1))), MM(((x_1+x_2)/2)-(lam*(-y_2+y_1))))
start = Point2D.Create(MM(0+cos(beta)*Laenge_3), MM(0+sin(beta)*Laenge_3))
end = Point2D.Create(MM(0+cos(alpha)*Laenge_2), MM(Laenge_1+sin(alpha)*Laenge_2))
result = SketchArc.Create(origin, start, end)
Gruß Jo
@ttschhj: Du rechnest an mehreren Stellen die selben Ausdrücke aus. Das Programm wird viel klarer, wenn Du das nur einmal machst und das Ergebnis in aussagekräftige Namen schreibst. Wenn x_1 eigentlich A_x heißt, warum nennst Du es nicht gleich so und sparst Dir den Kommentar?
Ja das stimmt, das stammt alles noch aus der Entwurfsphase
Die verschiedenen Bezeichnungen entstanden deshalb, da ich es vorher auf dem Papier gerechnet hatte
Ich bin schon dabei die Syntax etwas "aufzuräumen"..
Danke für eure Antworten!
Gruß Jo
Die verschiedenen Bezeichnungen entstanden deshalb, da ich es vorher auf dem Papier gerechnet hatte
Ich bin schon dabei die Syntax etwas "aufzuräumen"..
Danke für eure Antworten!
Gruß Jo