2016-03-24 5 views
0

Ich versuche, ein Programm auf CNC zu schreiben. Grundsätzlich habe ich Kreisbogen Start X, Y, Radius und Finishing x, y auch ich kenne die Richtung des Bogens im Uhrzeigersinn oder cc. Also muss ich den Wert von y auf dem Bogen an der spezifischen x-Position herausfinden. Was ist der beste Weg, das zu tun? Ich habe ähnliche Probleme auf dieser Website here gefunden. Aber ich bin mir nicht sicher, wie ich einen Winkel erreichen kann.Wie berechne ich Punkte und Position auf dem Bogen? Wenn ich Radius, Bogenanfangs- und -endepunkte habe

sample

+0

Sie nur y_random wollen Sie oder wollen Sie den Winkel als auch? – francium

+0

x = R cos (Theta), also Theta = Arccos (x/R), y = R sin (Theta). Möglicherweise müssen Sie möglicherweise sicherstellen, dass Sie sich im richtigen Quadranten befinden. – Obromios

+0

Entschuldigung, ich habe das nicht erwähnt, aber seinen Kreisbogen. – aidas

Antwort

0
genannt Datei mit dem Namen lesen formatiert werden

Zuerst müssen Sie die Kreisgleichung finden. Beginnen wir mit Pst = (xs,ys), Endpunkt Pend = (xend,yend)

Zur Vereinfachung verschieben Sie alle Koordinaten um (-xs, -ys), so wird Startpunkt Koordinatenursprung.

New Pend' = (xend-xs,yend-ys) = (xe, ye), neuer ‚zufälliger Punkt‘ Koordinaten xr' = xrandom - xs, unbekannt Kreismitte ist (xc, yc)

xc^2 + yc^2 = R^2 {1} 
(xc - xe)^2 + (yc-ye)^2 = R^2 {2} //open the brackets 
xc^2 - 2*xc*xe + xe^2 + yc^2 - 2*yc*ye + ye^2 = R^2 {2'} 
subtract {2'} from {1} 
2*xc*xe - xe^2 + 2*yc*ye - ye^2 = 0 {3} 
yc = (xe^2 + ye^2 - 2*xc*xe)/(2*ye) {4} 
substitute {4} in {1} 
xc^2 + (xe^2 + ye^2 - 2*xc*xe)^2/(4*ye^2) = R^2 {5} 
solve quadratic equation {5} for xc, choose right root (corresponding to arc direction), find yc 

having center coordinates (xc, yc), write 
yr' = yc +- Sqrt(R^2 -(xc-xr')^2) //choose right sign if root exists 
and finally exclude coordinate shift 
yrandom = yr' + ys 
0

Gleichung eines Kreises ist x^2 + y^2 = r^2

in Ihrem Fall wissen wir x_random und R

Substitution in weiß, dass wir bekommen,

x_random^2 + y_random^2 = R^2 

und Lösung für y_random get Get

y_random = sqrt(R^2 - x_random^2) 

Jetzt haben wir y_random

Edit: Dies funktioniert nur, wenn Ihr Bogen ein Kreisbogen ist und nicht ein elliptischer Bogen

diese Antwort auf eine Ellipse anzupassen, müssen Sie verwenden anstelle der Gleichung eines Kreises dieser Gleichung

(x^2/a^2) + (y^2/b^2) = 1, wo a der Radius entlang der x axisb und der Radius entlang y axis


Einfache Skript Daten aus einer Datei data.txt und berechnen eine Reihe von y_random Werte und schreibt sie in eine out.txt

import math                 

def fromFile():                
    fileIn = open('data.txt', 'r')           
    output = ''                
    for line in fileIn:              
     data = line.split()             
     # line of data should be in the following format      
     # x h k r               
     x = float(data[0])             
     h = float(data[1])             
     k = float(data[2])             
     r = float(data[3])             
     y = math.sqrt(r**2 - (x-h)**2)+k          
     if ('\n' in line):             
      output += line[:-1] + ' | y = ' + str(y) + '\n'     
     else:                
      output += line + ' | y = ' + str(y)        
    print(output)               
    fileOut = open('out.txt', 'w')           
    fileOut.write(output)             
    fileIn.close()               
    fileOut.close()               

if __name__ == '__main__':             
    fromFile() 

data.txt sollten als solche

x0 h0 k0 r0 
x1 h1 k1 r1 
x2 h2 k2 r2 
... for as many lines as required 
+0

Ich dachte Gleichung für Kreis ist (x - h)^2 + (y - k)^2 = r^2. Liege ich falsch? h, k Mittelpunkt eines Kreises. – aidas

+0

@aidas h und k werden verwendet, um den Kreis entlang der x- und y-Achse zu verschieben. Wenn Sie den Kreis nicht übersetzen, h = 0, k = 0, dann erhalten Sie x^2 + y^2 = r^2 – francium

+0

, aber in meinem Fall h und k ist nicht 0.Ich könnte den Ursprung mit jedem Bogen in dem Programm, das ich mache, auf Null setzen. aber ich hoffe, dass es eine sauberere Methode gibt. – aidas

Verwandte Themen