Länge einer archimedischen Spirale berechnen



  • Dieser Thread wurde von Moderator/in Martin Richter aus dem Forum MFC (Visual C++) in das Forum Mathematik und Physik verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Verwende doch einfach die Längenformel für die Spirale -- dazu brauchst du nur den gesamtwinkel wie oft gedreht wurde, also 2pi*#Umdrehungen+Restumdrehung

    http://de.wikipedia.org/wiki/Archimedische_Spirale



  • Jester schrieb:

    Verwende doch einfach die Längenformel für die Spirale -- dazu brauchst du nur den gesamtwinkel wie oft gedreht wurde, also 2pi*#Umdrehungen+Restumdrehung

    http://de.wikipedia.org/wiki/Archimedische_Spirale

    Vielen Dank für deine Antwort. Dort habe ich schon geschaut. Mein Problem ist, dass ich ja keine Winkel sondern diskrete Werte habe. Als Näherung geht ja die Aproxximation, dass die einzelnen Windungen schon als Kreis mit einem mittleren Radius angesehen werden können. Nur muss man dann wissen, welcher Rest übrig bleibt und diesen dann nur noch mit Resrumdrehung*2*Pi/200 multiplizieren. Sehe ich das richtig? Die Dicke der Stoffbahn liegt im Bereich 0,5-1,5 mm.



  • Hi AndyDD,

    AndyDD schrieb:

    Vielen Dank für deine Antwort. Dort habe ich schon geschaut. Mein Problem ist, dass ich ja keine Winkel sondern diskrete Werte habe.

    du sagst doch oben, dass du 200 Messpunkte a 1,8° aufnimmst. D.h. wenn du die Anzahl der Messpunkte der letzten Lage kennst, dann kannst du dir doch daraus einen Winkel berechnen - oder nicht?

    Gruß,
    Klaus.



  • Klaus82 schrieb:

    Hi AndyDD,

    AndyDD schrieb:

    Vielen Dank für deine Antwort. Dort habe ich schon geschaut. Mein Problem ist, dass ich ja keine Winkel sondern diskrete Werte habe.

    du sagst doch oben, dass du 200 Messpunkte a 1,8° aufnimmst. D.h. wenn du die Anzahl der Messpunkte der letzten Lage kennst, dann kannst du dir doch daraus einen Winkel berechnen - oder nicht?

    Gruß,
    Klaus.

    Naja, ich wollte nicht erst irgendwelche Winkel ausrechnen. Mathematisch gesehen ist das ja eine Summierung kleiner Bogenelemente ds über den gesamten Drehgrad der Spirale. Ich suche nach einer Möglichkeit, einfach mittels Schleife durch das Array zu steppen und dann das Ergebnis zu errechnen.


  • Mod

    AndyDD schrieb:

    Naja, ich wollte nicht erst irgendwelche Winkel ausrechnen. Mathematisch gesehen ist das ja eine Summierung kleiner Bogenelemente ds über den gesamten Drehgrad der Spirale. Ich suche nach einer Möglichkeit, einfach mittels Schleife durch das Array zu steppen und dann das Ergebnis zu errechnen.

    Jester schrieb:

    Verwende doch einfach die Längenformel für die Spirale -- dazu brauchst du nur den gesamtwinkel wie oft gedreht wurde, also 2pi*#Umdrehungen+Restumdrehung

    http://de.wikipedia.org/wiki/Archimedische_Spirale

    Du gehst mittels Schleife durch dein Array, und zählst die Umdrehungen. Woher die Angst vor Winkelberechnungen? Schonmal was von atan2 gehört?



  • SeppJ schrieb:

    Du gehst mittels Schleife durch dein Array, und zählst die Umdrehungen. Woher die Angst vor Winkelberechnungen? Schonmal was von atan2 gehört?

    Ich hab davor keine Angst. Aber ich muss ein wenig zeiteffektiv arbeiten, da die Berechnungen in einem Thread liegen, der zeitkristisch arbeitet. Jeder unnütze Rechenschritt sollte vermieden werden. Ich habe noch nichts von atan2 gehört und wüsste auch nicht, wofür ich den brauche.



  • AndyDD schrieb:

    Naja, ich wollte nicht erst irgendwelche Winkel ausrechnen.

    Ich sehe das Problem auch nicht.

    Winkel = AnzahlMesspunkte*1.8;

    und am Ende des prozesses setzt du das in die Formel der Spirallaenge ein.

    Das ist ein sinus und eine Wurzelfunktion fuer eine komplette Bahn. Wo ist das Zeitkritisch?



  • Hi,

    ich komme bei ein paar Überlegungen für dein Problem nicht weiter.

    Ich kenne leider den Aufbau und vollen Umfang des bisherigen Programms nichts. Aus deinen bisherigen Berichten nehme ich an, dass bei der Anlage 200 Messpunkte aufgenommen werden und jeder Messpunkt nun darüber entscheidet, ob Stoff vorhanden ist oder nicht?

    Sprich wenn alle 200 Messpunkte true sind, dann weiß der Computer eine Stoffbahn ist voll. Jetzt muss der Computer doch aber irgendwie auf einen Radius R kommen, denn der Umfang U ist gerade U=2πRU = 2\cdot\pi \cdot R.

    Weiterhin muss der Computer wissen, um wieviel der Radius pro Umlauf zunimmt. Also allgemein habe ich ein U_i=2πR_iU\_i = 2\cdot \pi \cdot R\_i und hierbei muss jetzt die Differenz zwischen RiR_i und Ri+1R_{i+1} bekannt sein.

    Dass du oben schreibst die Dicke der Stoffbahnen sei variabel irritiert mich ein wenig, denn das bedeutet doch, dass die Länge einer Windung nicht unbedingt mit dem übereinstimmen muss, was der Computer berechnet. Dass also der Zuwachs an Radius pro Umdrehung nicht konstant ist. Kann ich mir durchaus vorstellen, Stoff ist eben kein hochgradig festes Material, willkommen in der Praxis. 😉

    Scheinbar wird dieser Fehler durch die Mittelung wieder ausgeglichen.

    Was du nun am Ende für die letzte Lage benötigst ist also der Anteil des Umfangs, der nicht beendet wurde. Wenn man möchte, so kann man auch einfach ein wenig Dreisatz machen. Falls für die letzte Lage der Radius R bekannt ist, so gilt nach wie vor U=2πRU = 2\pi R. Nun beziehen sich aber die 2π2\pi auf 360° , d.h. die vollen 200 Messpunkte. Wenn von diesen 200 Messpunkten allerdings nur x angeschlagen haben, weil die letzte Lage eben nicht voll aufgewickelt ist, so gilt einfach U=x/2002πRU = x/200 \cdot 2\pi R.

    Fertig.

    Gruß,
    Klaus.



  • Ok, dann muss ich etwas weiter ausholen. Genaugenommen ist es kein Stoff was wir verarbeiten, allerdings kommt diese Begrifflichkeit der Realität sehr nahe. Dieser ominöse Stoff wird zweilagig auf einer zylindrischen Spule bereitgestellt. Dan wird er auf einen konischen Zylinder mit konstanter Zugspannung umgewickelt. Es ist bekannt, dass die inneren Lagen der Vorratsspule durch die Pressung der darüber liegenden Lagen in der Dicke etwas dünner sind, daher kommt die Variabilität der Dicke des Materials. Auf dem aufnehmenden konischen Zylinder wird taktil beidseitig der Radius gemessen. Dabei entsprechen 200 Messwerte einem Vollkreis, weil der Schrittmotor eben diese Teilung besitzt. Damit entstehen da schon mal 400 Messwerte pro Umdrehung. Gestoppt wird der Vorgang, wenn sich beide Radien innerhalb gewisser Vorgabefenster befinden. Damit ist klar, dass sich bei konstantem Endradius und variabler Dicke unterschiedliche Längen ergeben. Abschließend soll aus den gemessenen Werten die Länge des aufgewickelten Stoffstücks berechnet werden.
    Der bisherige Algorhythmus geht dabei von quasi konzentrischen Kreisen aus, deren Umfang durch einen mittleren Radius U=2π(r1+r2+...r200)/200U = 2\cdot\pi \cdot (r1+r2+...r200)/200 angenommen werden. Dann werden die Teilumfänge addiert. Problematisch ist eben die letzte Lage, weil dort kein voller Kreis entsteht. Hoffe, dass es jetzt besser verständlicher ist.
    Da die Messwerte (5 Analogspannungen)aus einer Messkarte ausgelesen werden, Berechnungen für die Bahnzugsteuerung durchgeführt und zwei Analogspannungen wieder ausgegeben werden müssen und weiterhin noch die Flankensteuerung für den Schrittmotor in diesem Prozess integriert ist, muss ich hier relativ zeitoptimal arbeiten.



  • Hi,

    ich glaube wir haben hier aneinander vorbeigeredet.

    Also mit deiner Formel U=2π(r_1+r_2++r200)/200U=2\cdot\pi\cdot\big(r\_1 + r\_2 + \ldots + r_{200}\big)/200 willst du sagen, dass ein Umlauf 200 mal gemessen wird und dann der Mittelwert aus all diesen Radien gebildet wird, um den Fehler zu beseitigen?

    Dann wird der nächste Umlauf gemessen, usw.?

    Gruß,
    Klaus.



  • Wir reden immer noch aneinander vorbei. Die Prozessbeschreibung hatte ich schon gegeben. Wir wickeln solange, bis sich beide Radien innerhalb eines Vorgabefensters befinden. Das können je na Typ 3-18 Wicklungen der Spirale sein. Wenn das alles fertig ist soll eine Funktion aus den Radiendaten (welche sich in einem Array befinden) die Abwickellänge dieser Spirale berechnen. Bei 3 Lagen haben wir dann eben bis zu 900 Radiuswerte pro Seite, bei 18 Lagen sind es bis zu 3600. Diese Zahlen sind eben variabel, weil die Maschine immer an unterschiedlichen Stellen anhält und dann nie volle Kreise macht. Das bisherige Programm ist noch in Turbo Pascal geschieben und macht das hier:

    Wickellaenge:=0;
    FOR j:=1 TO EndLage DO
    BEGIN
      FOR i:=1 TO 200 DO
      BEGIN
        IF (Radius_links[i,j]<>0) AND (Radius_links[i,j-1]<>0) THEN
        BEGIN
          Wickellaenge:=Wickellaenge+(Radius_links[i,j]+Radius_rechts[i,j])/2/100;
        END;
      END;
    END;
    Wickellaenge:=Wickellaenge*2*PI/200/10;      {in cm}
    

    Nur wird eben hier nicht beachtet, dass die letzte Lage nicht vollständig ist. Jetzt schreibe ich das in C++ und muss diese Rechnung auch noch zeitoptimiert ausführen.



  • Folgendes: nehmen wir an, du hast die ersten 1-200 Messpunkte. Da ist die Rechnung klar, du nimmst den mittleren Radius, also summe/200 *2π

    Wie sähe es bei nur einem Halbkreis aus? Naja, der mittlere Radius ist dann der Mittelwert der dann nur 100 Messpunkte, also für den ersten Halbkreis der Umfang
    summe/100 *2π *1/2 (1/2 weils nur der erste Halbkreis ist) Das 1/2 kannste reinrechnen in den vorderen Teil: summe/200 *2π - kommt das bekannt vor? Richtig. Wie siehts bei nem Viertelkreis aus? - kürzt sich weg, oder? Wie schauts denn bei zwei Umdrehungen aus? Oder 10? oder 11,5? Alles das Selbe!

    Die Formel die du suchst ist bei 200 Messpunkten pro Umdrehung ganz einfach:

    SummeAllerMesspunkte * π/100. Fertig.



  • pumuckl schrieb:

    Folgendes: nehmen wir an, du hast die ersten 1-200 Messpunkte. Da ist die Rechnung klar, du nimmst den mittleren Radius, also summe/200 *2π

    Wie sähe es bei nur einem Halbkreis aus? Naja, der mittlere Radius ist dann der Mittelwert der dann nur 100 Messpunkte, also für den ersten Halbkreis der Umfang
    summe/100 *2π *1/2 (1/2 weils nur der erste Halbkreis ist) Das 1/2 kannste reinrechnen in den vorderen Teil: summe/200 *2π - kommt das bekannt vor? Richtig. Wie siehts bei nem Viertelkreis aus? - kürzt sich weg, oder? Wie schauts denn bei zwei Umdrehungen aus? Oder 10? oder 11,5? Alles das Selbe!

    Die Formel die du suchst ist bei 200 Messpunkten pro Umdrehung ganz einfach:

    SummeAllerMesspunkte * π/100. Fertig.

    Na das ist ja mal ein Argument. Hab ich so noch nicht gesehen, aber vielen Dank. Wenn man sich das herleitet leuchtet es ein. Der Code oben macht das ja. Das mit /100 ist der Tatsache geschuldet, dass hier bei 2 Nachkommastellen vorher der Wert *100 genommen und als int oder long abgespeichert wurde. Also danke für den Tipp. Manchmal sieht man den Wald vor lauter Bäumen nicht. 👍


Anmelden zum Antworten