Papierrolle-Abspulvorgang

Ich musste herzliche lachen darüber. :wink:

(Es gibt ja nicht nur Toilettenpapier, man denke mal an Zeitungen. (Die können auch stinken im auto…))

Aber was mit Stirnfläche gemeint ist, wusste ich auch nicht.

@ TO : Ein Array „freigeben“ kannst du, wenn du Element(e) auf 0 oder null setzt oder der Scope verlassen wird (klingt schlimmer, als es ist). Was hast du bis jetzt an Logik-Code?

@ Lex : Mann müsste jetzt von der (verbleibenden) Länge auf die Anzahl der Umdrehungen schließen können - und/oder umgekehrt.

Schönen Abend bei euch.

Was mich jetzt mal interessieren würde: hat jemand mal mit der archimedischen Spiralformel die exakte Länge einer Papierrolle berechnet und die mit @L-ectron-X Formel verglichen?
Die Abweichung zur “Ringnäherung”, die in der Aufgabenstellung vorgeschlagen wird, wäre auch interessant.

*** Edit ***

Ich habe für alle drei Varianten mal geschlossene Formeln aufgestellt (das geht für die Ringnäherung mit der Gaußschen Summenformel) und für Normalpapier halbwegs realistische Werte von einer Lagendicke von 0,1mm angenommen. Der Außendurchmesser des Rollenkernes habe ich mit 30mm und den Außendurchmesser der gesamten Papierrolle habe ich mit 100mm angenommen. Mit allen drei Formeln komme ich auf eine Länge von 71.471,23mm. (Wobei ich zugeben muss, dass ich bei den Formeln irgendwo jeweils den Faktor 2 bzw. 4 übersehen habe.)
Für halbwegs realistische Werte macht es also keinen Unterschied, womit man rechnet.

Mit Abstand am einfachsten ist hierbei die Formel von LeX, weshalb ich dieser den Vorzug geben würde.

Edit: ich bin mir mit dem Ergebnis nicht mehr so ganz sicher… Gerade glaube ich eher, dass das richtige Ergebnis 142.942,4705mm ist…

Hab es mal mit Excel ausprobiert und komme auf sehr ähnliche Werte.

Mit der Formel r = phi * a

r = 0,1
phi = 2 PI

Bekomme ich für a einen Faktor 0,0159154943

Mit der Bogenformel bekomme ich dann

714,7219095009

Lectron-X

714,7123286917

Für einen Aussendurchmesser von 10, Kerndurchmesser 3 und einer Dicke von 0,1.

Für die Bogenformel, also das PHI nehme ich die Anzahl der Umdrehungen (Radius / Dicke) * 2 PI als Grundlage.

Formel LeX: 71.471,23287
Archimedische Formel: 71.471,24245
Ringnäherung: 71.376,67093

Nicht direkt, aber ich hatte gestern der Neugierde halber mal versucht die Aufgabe mit der Spirale zu bearbeiten (ob die Spirale wirklich eine bessere Approxmation an die Realität ist sei jetzt mal dahingestellt). Das Ganze verlief auch ziemlich glatt - bis zu der Stelle an der es galt einen Bogen bestimmter Länge von der Rolle abzuwickeln. Dort versagte meine Modellierung, da ich ad hoc außerstande war eine bestimmte Formel umzustellen. :frowning:

Für den Fall das es jemand anderes mal versuchen möchte beschreibe ich hier mal eben die Modellierung:

Als erstes bestimmen wir den Proportionalitätsfaktor a. Da der Radius pro Umdrehung um die Papierstärke zunehmen soll ergibt sich a als
[tex]a = \frac{papierstaerke}{2\pi} [/tex].

Start- und Endpunkt der Spirale repräsentieren wir durch ihre Winkel:
[tex] \phi = \frac{aussenradius}{a}\ \phi_{ende} = \frac{innenradius}{a}[/tex]
Anmerkung: [tex]\phi_{ende}[/tex] gibt das innere Ende der Spirale an, [tex]\phi[/tex] das äußere Ende. Zum Abspulen der Papierrolle werden wir im Folgenden einfach [tex]\phi[/tex] verkleinern (also gegen [tex]\phi_{ende}[/tex] laufen lassen).

Für die Parameter papierstärke = 0.5, aussendurchmesser = 10, innendurchmesser = 5 schaut unsere virtuelle Spirale so aus:

Die Länge eines Papierbogens lässt sich nun mit Hilfe der Bogenlänge bestimmen. Die Formel dafür ist laut Wiki:
[tex] Bogenlaenge(\phi) = \frac{a}{2} \left( \phi \sqrt{1+\phi^2} + ln \left( \phi + \sqrt{1+\phi^2} \right) \right) [/tex].

Die Bogenlänge ist dabei die Länge der Spirale vom Ursprung aus bis zu dem durch [tex]\phi[/tex] repräsentierten Punkt (in den Diagrammen die Länge des roten Kurvenstücks). Die Länge der gesamten Papierrolle ist folglich
[tex] LaengeDerPapierrolle = Bogenlaenge(\phi) - Bogenlaenge(\phi_{ende}) [/tex].

Jetzt brauchen wir nur noch die Möglichkeit Papier abzuspulen. Im ersten Fall - es sollen n ganze Umdrehungen abgespult werden - ist die Sache einfach:
[tex] \phi = \phi - 2n\pi [/tex].

Im zweiten Fall - es soll eine Papierfläche abgespult werden - müssen wir zunächst die Länge des gewünschten Papierbogens bestimmen:
[tex] papierlaenge = \frac{papierflaeche}{rollenbreite} [/tex]

So. Und jetzt müsste man eigentlich nur noch die obige Formel für die Bogenlänge nach [tex] \phi [/tex] umstellen um den resultieren Winkel [tex]\phi[/tex] zu erhalten. Aber das ist leichter gesagt als getan… Hier wäre wohl ein Näherungsverfahren angesagt um den Winkel zu bestimmen, aber wirklich schön finde ich das nicht. Hat jemand 'ne bessere Idee?

(Als Annäherungsformel bin ich nur auf
[tex] \phi = \sqrt{ \phi^2 - 2\frac{papierlaenge}{a} } [/tex]
gestoßen*, aber ehrlich gesagt finde ich diese Näherung zu schlecht als das ich sie verwenden würde)

*nicht selbst errechnet sondern aus http://www.matheraetsel.de/archiv/DGLS/Wickel/WICKEL2.PDF entnommen

Als exakte mathematische Lösung sehe ich da eigentlich auch nur das Umstellen der Formel nach [tex]\varphi[/tex]. Ich denke aber nicht, dass das elementar lösbar ist.
Dort würde ich keine Näherungsformel nehmen, sondern die Numerische Mathematik anwenden. Ob man in diesem Fall überhaupt eines der effizienten Verfahren benötigt, wage ich zu bezweifeln (dann bräuchte man wahrscheinlich noch die erste Ableitung der Funktion*).
Die Funktion ist streng monoton, was die Suche nach dem Ergebnis begünstigt. Daher reicht wahrscheinlich eine einfache “Bisektionssuche” mit den Startgrenzen [tex]\varphi_1[/tex] und [tex]\varphi_2[/tex] aus, um das Ergebnis möglichst exakt anzunähern.

  • Wenn ich mich nicht irgendwo vertan habe, dann ist die Ableitung nach [tex]\varphi_2[/tex]: [tex]\frac{s}{4\pi}\left(\frac{\varphi_2+\sqrt{1+\varphi_2^2}}{\sqrt{1+\varphi_2^2}\left(\sqrt{1+\varphi_2^2}+\varphi_2+c\right)}+\sqrt{1+\varphi_2^2}+\frac{\varphi_2^2}{\sqrt{1+\varphi_2^2}}\right)[/tex]
    mit [tex]c=-\varphi_1\sqrt{1+\varphi_1^2}-ln\left(\varphi_1+\sqrt{1+\varphi_1^2}\right)[/tex], [tex]\varphi_1=\frac{\pi d_i}{s}[/tex] und [tex]\varphi_2=\frac{\pi d_a}{s}[/tex].
    Dabei sind [tex]d_i[/tex] und [tex]d_a[/tex] die Innen- sowie Außendurchmesser und [tex]s[/tex] die Stärke des Papiers.

P.S.: ich glaube, der Thread passt mittlerweile besser in die Mathe-Ecke oder in Hausaufgaben, Java-Grundlagen sind da glaube ich weniger das Problem.

Man könnte auch die Aufgabe genauer lesen:

Falls erforderlich, können Sie statt der eigentlichen Spiralform der Papierbahn auf der Rolle annehmen, es lägen jeweils einzelne Papierlagen in Zylinderform übereinander.

Es ist eben ganz eindeutig erforderlich, weil sonst aus einem eher simplen Problem ein Wahnsinn wird.

Das ist hier nicht der Punkt. Dass es damit einfacher ist, ist offensichtlich. (Edit: Der Algorithmus wird mit der Zylinderform wahrscheinlich gar nicht einfacher als mit der beschriebenen Bisektionssuche…)

Deshalb dieser Ansatz.
Abgesehen davon finde ich eine kurze while-Schleife, die eine Bisektionssuche macht, nicht unbedingt wahnsinnig kompliziert. Das ändert aber nichts an dem Umstand, dass dieses Problem mathematisch interessant ist :wink:

Sehe ich genauso. Eine binäre Suche liegt allemal im Rahmen, und damit dürfte die resultierende Klasse auch recht übersichtlich werden. Unterschiedlich große Zylinder übereinander zu stülpen wäre mir dafür ehrlich gesagt zu kompliziert.

Ist ja richtig interessant geworden. Möglicherweise könnten mir Teile aus cmrudolphs Beitrag auch in einem meiner Themen zu einer eleganten Lösung verhelfen.

Der verlinkte Beitrag ist aber von @Dow_Jones :wink:
Dein Fall ist eigentlich sogar ein bisschen einfacher gelagert (von den Formeln her).

Ups, Entschuldigung! Trotzdem danke euch beiden. :slight_smile:

Das ist doch vollkommen albern.

Du willst allen ernstes

  1. die Formel für die Bogenlänge einer archimedischen Spirale nehmen (eine Black-Box, Wikipedia hat immer recht, StrgC-StrgV, fühlt sich so super genau an…)

  2. dann via Bisektionssuche (Intervallhalbierung) die Umkehrfunktion bestimmen

  3. mit dem Bogenmaß hantieren

und findest das genau so „einfach“ wie eine simple arithmetische Reihe?

Und: wenn der Innendurchmesser >0 ist, dann IST die Aufwicklung bestimmt KEINE Spirale (weil die erste Lage KONSTANTEN Durchmesser hat), diese Pseudo-Exaktheit ist also von vorne herein fragwürdig

Klingt sehr nach Enterprise-Software-Architekt!

Die Bogenlänge einer Kurve ist immer streng monoton wachsend, hat also immer eine Umkehrfunktion. Fast immer - und auch in diesem Fall - lässt sich diese Umkehrfunktion nicht durch elementare Funktionen ausdrücken. Also macht man Intervallhalbierung oder andere Näherungen. So interessant ist das nun auch wieder nicht.

Ach @Bleiglanz , du brauchst doch nicht herumzustänkern… seufz

Die Formel für die archimedische Spirale ist auch nicht „genau“, weil der Windungsabstand nicht konstant die Papierstärke ist. Erst wenn man einen genügend großen Rollenkern hat sind die Windungen nahezu parallel, sodass das eine recht gute Näherung darstellen sollte (ja, sehr viel Konjunktiv).
Womöglich ist die Näherung mit den zylindrischen Papierlagen sogar genauer!

Was ist am Bogenmaß verkehrt? Das ist eine reine Gewöhnungssache und macht viele Rechnungen eleganter.

Um das direkt vergleichen zu können, müsste man wohl beide Varianten einfach mal implementieren. Der Aufwand ist zumindest überschaubar. Die Formeln für die Papierlänge habe ich für alle drei Varianten allgemein aufgestellt, Umkehrfunktionen allerdings nicht ermittelt.

Da stimme ich dir zu, siehe oben in diesem Beitrag. Alle Herangehensweisen sind nur Näherungen und ich habe auch schon geschrieben, dass ich von den Näherungen die Formel von LeX am einfachsten finde (siehe #22).

Was man interessant findet und was nicht, liegt im Auge des Betrachters. Ich finde es interessant mich mit solchen Problemen zu beschäftigen, egal ob die Ansätze „exakt“ oder „richtig“ sind oder nicht. Wenn du das öde findest, dann zwingt dich ja keiner, dich damit zu beschäftigen!

Montag morgen, was soll man machen :slight_smile:

Stimmt schon, aber im Kontext der (Anfänger!)-Aufgabe ist das einfach too much.

Hab ich schon gesagt, dass ich mal Mathelehrer war? Am Bogenmaß selbst ist nichts verkehrt, verkehrt ist die Tatsache, dass ein so simples Konzept für 75% der Bevölkerung ein undurchschaubares, unbegreifliches Wunder ist…weshalb man es hier in diesem Thread (in „Java-Grundlagen für Anfänger und Umsteiger“) eigentlich nicht erwähnen sollte.

Verständlich, geht mir nicht besser :wink:

Als Hilfestellung für den Threadersteller ist es vielleicht zuviel. @Vivess hat sich aber nach @SlaterB s Antwort nicht mehr gemeldet.
Ja, Threads „kapern“ ist nicht nett, aber in diesem Fall ist die Diskussion ja doch sehr themenbezogen.

Interessant. Auf einen (deutschen) Bevölkerungsquerschnitt bezogen ist die Prozentzahl aber sicherlich noch deutlich zu niedrig.
Ein (werdender) Informatiker entspricht aber mMn nicht dem Querschnitt und zumindest mein Informatikstudium war sehr mathelastig. Deshalb erwarte ich eigentlich auch, dass sich auch ein Informatikanfänger mit dem Matheschulstoff gut auskennt (Niveau 10. Klasse?).

Off Topic

[quote=cmrudolph]Ein (werdender) Informatiker entspricht aber mMn nicht dem Querschnitt und zumindest mein Informatikstudium war sehr mathelastig. Deshalb erwarte ich eigentlich auch, dass sich auch ein Informatikanfänger mit dem
Matheschulstoff gut auskennt (Niveau 10. Klasse?).[/quote]

Erwarte ich nicht, da die meisten Abiturienten das Niveau der 10. Klasse ja nie erreichen - und auch sonst würde ich deinen Optimismus nicht teilen…

Why Can’’'t Programmers… Program?

Nicht ganz so einfach, an der Übergangstelle zwischen erster und zweiter, zweiter und dritter usw. usf. Lage müsste der Durchmesser etwas dicker/stärker sein, ergo isst dann auf der Rolle - je nachdem, wo man misst - etwas mehr oder weniger Papier, vielleicht geht es da schon um Milli- oder Mikrometer, die bei ganz vielen Rollen ins Gewicht fallen.

[QUOTE=cmrudolph]Verständlich, geht mir nicht besser :wink:

Als Hilfestellung für den Threadersteller ist es vielleicht zuviel. @Vivess hat sich aber nach @SlaterB s Antwort nicht mehr gemeldet.
Ja, Threads „kapern“ ist nicht nett, aber in diesem Fall ist die Diskussion ja doch sehr themenbezogen…[/QUOTE]

Moin, ich bin nicht verschwunden falls dieses gemeint war. Ich hatte halt kein Anliegen um mich zu melden, da das Problem für mich nicht Mathematisch war sondern eher eine Art Unwissenheit in Sachen Array.
Ich hatte am Wochenende auch nicht wirklich Zeit.

Ich bedanke mich trotzdem herzlich für alle Beiträge.

Die nächsten Schritte sollten jetzt sein (wurden alle oben genannt):

abstraktes Verfahren implementieren -> Bisektionssuche -> Intervallhalbierung -> praktisch akzeptable Zeit -> log(n) -> sehr schnell -> Grenzfälle ‘testen’

Dabei wirklich auf Lex vertrauen -> Approximation einer echten Papierrolle und Abspulvorgang

Also zB es gibt 3 Bit, 0 bis 7, dann testest du: 0-7, 0-3, usw., und hast blitzschnell richtiges Ergebnis.