ENGLISH VERSION |
|
Links | | | Forum | | | Kommentare | | | News melden |
Chat | | | Umfragen | | | Newsticker | | | Archiv |
amiga-news.de Forum > Programmierung > Winkelfunktionen... | [ - Suche - Neue Beiträge - Registrieren - Login - ] |
-1- | [ - Beitrag schreiben - ] |
29.11.2003, 23:29 Uhr Ralf27 Posts: 2779 Nutzer |
Ich hab da ein kleines Problem... Eins vorweg: Ich programmiere aus Spaß an der Freude in MBasic und will nicht in C umsteigen. Also, ich hab ein Wert des Cosinus, aber leider komme ich mit der Funktion von Basic (Wert=COS(x) nicht weiter, denn da gebe ich denn Winkel(im Bogenmaß, schon klar) ein und er berechnet denn Cosinus. Aber die Ausgabe ist da nicht Grad, sondern halt eben der Cosinus. Es müßte doch auch eine Funktion geben die dann denn Winkel übergibt in Grad (oder Bogenmaß) wie z.b. COS-1. Leider finde ich sowas in Basic nicht. Konkreter Fall: l1=1000 : REM Strecke Dreieck Seite 1 l2=1000 : REM Strecke Dreieck Seite 2 la=1000 : REM Strecke Dreieck Unten v=2*(4*ATN(1))/360 : REM Umrechnung Bogenmaß<->Grad x=(l1^2+l2^2-la^2)/(2*l1*l2) : REM Kosinussatz w=COS(x*v) : REM v für Umrechnung Bogenmaß w sollte jetzt der Winkel in Grad sein, was er leider nicht ist(soweit kenne ich diese Funktion schon, aber der Vollständigkeitshalber) x ist jetzt der Cosinuswinkel, der stimmt. (0.5) Wie zum Geier bekomme ich jetzt aus x wieder einen Winkel in Grad hin? Es müßten logischerweiße hier in diesem Beispiel 60Grad rauskommen. Danke im vorraus! :-) -- http://www.alternativercomputerclub.de.vu [ Dieser Beitrag wurde von Ralf27 am 29.11.2003 editiert. ] [ - Antworten - Zitieren - Direktlink - ] |
29.11.2003, 23:38 Uhr Kronos Posts: 1168 Nutzer |
Mir ist jetzt nicht ganz klar was du willst: a) Aus einem Winkel im Bogenmass willst du einen in Grad machen. Lösung : g = b/PI*180 b) Du willst aus einem Cosinuswert auf den Winkel schliessen. Normalerweise müsste es da eine ACos()-Funktion geben, zur Not kannst du auch SPACos() aus der Mathtrans.library nehmen. MfG Kronos -- Only the good die young all the evil seem to live forever [ - Antworten - Zitieren - Direktlink - ] |
29.11.2003, 23:47 Uhr Ralf27 Posts: 2779 Nutzer |
Zitat: Dies Bewerkstellige ich oben ja auch schon, das ist nicht das Problem. Zitat: Genau da liegt der Hase im Pfeffer. Die Funktion ACos gibt es leider nicht bei MBasic, aber dafür ATN (das gleiche für Tan). Die Funktion SPACos bei Mathtrans habe ich eben auch schon gesehn. Das wäre wohl die Rettung. Ich frage mich eben nur wie ich die Paramter übergebe in MBasic: library"mathtrans" declare function SpACos library w=0.5 x=SpACOS(varptr(w)) ??? Kann ja so nicht gehn. Kennt sich jemand mit MBasic, AmigaBasic aus und dazu auch noch mit der Mathtrans? Bzw. der Winkel kann ja wohl kaum so übergeben werden. Muß ich auch noch denn Paramter erst wandeln? Sprich z.b. mit MKD$ (doppelte Genauigkeit)? -- http://www.alternativercomputerclub.de.vu [ - Antworten - Zitieren - Direktlink - ] |
29.11.2003, 23:52 Uhr Ralf27 Posts: 2779 Nutzer |
Oder kann man die Funktion ACOS auch irgendwie mit anderen Funktionen "umschreiben"? -- http://www.alternativercomputerclub.de.vu [ - Antworten - Zitieren - Direktlink - ] |
29.11.2003, 23:52 Uhr Kronos Posts: 1168 Nutzer |
Schau doch erstmal etwas genauer nach ob es nicht doch irgentetwas für ACos() gibt, kann ja eventuell auch ArcCos oder sonstwie heissen. Laut C-includes will SPAcos() (so ist die genaue Schreibweise) einen Parameter als float, also mit einfacher Genauigkeit, und liefert den Winkel im Bogenmass (ebenfalls als float). Library-Aufrufe mit AmigaBasic sind eine Qual, hoffe das M(axon ?)Basic da etwas ziviler ist MfG Kronos -- Only the good die young all the evil seem to live forever [ - Antworten - Zitieren - Direktlink - ] |
30.11.2003, 00:00 Uhr Ralf27 Posts: 2779 Nutzer |
Zitat: Ich weiß leider nich genau wie ich das bewerkstelligen soll. Muß da wohl etwas testen. Ich denke mir aber mal das hier Zeichenketten übergeben werden und keine Zahlen. Oder wie würde das in C aussehn? (Die Übergabe der Zahlen) Zitat: Wenn Du jetzt TAG-Listen meinst, nun die sind jetzt auch mit MBasic möglich. Aber allgemein getippt muß ich tippen das es mit MBasic keine Qual ist. Z.b.: Text rastport&,x,y Text ist hier die Funktion aus Graphics. Geht es auch noch einfacher? :-) Zitat: -- http://www.alternativercomputerclub.de.vu [ - Antworten - Zitieren - Direktlink - ] |
30.11.2003, 00:06 Uhr Kronos Posts: 1168 Nutzer |
Zeichenketten ????? Nene, eine 32bittige Fliesskommazahl, was den sonst ? Versuch einfach mal: x=SpACOS(0.5) SpACOS(varptr(w)) macht keinen Sinn, da die Funktion keinen Pointer sondern den Wert selber erwatet. MfG Kronos -- Only the good die young all the evil seem to live forever [ - Antworten - Zitieren - Direktlink - ] |
30.11.2003, 00:16 Uhr Ralf27 Posts: 2779 Nutzer |
Zitat: So einfach ist das leider nicht. Da unterscheidet sich C und Basic. Ich hab es eben versucht (obwohl ich fast sicher war das es nicht geht) und leider war es dem auch so. Irgendwo gibt es da noch ein Problem. Der Rückgabewert ist immer Null und das kann ja wohl nicht sein. Aber ich versuch jetzt noch mal was. -- http://www.alternativercomputerclub.de.vu [ - Antworten - Zitieren - Direktlink - ] |
30.11.2003, 01:21 Uhr AchimStegemann Posts: 112 Nutzer |
Ach.. das ist doch so einfach! Ein Blick in ein Mathebuch und da stehen folgende Formeln: acos(x)=atan(sqrt(1-x*x)/x) asin(x)=atan(x/sqrt(1-x*x)) acos(x) und asin(x) sind die Umkehrfunktionen von cos(x) und sin(x). Basic kann aber nur atan. Alles klaro? Gruß Achim PS: Du bekommst den Umrechenfaktor von Grad nach Bogenmaß einfacher mit: GTOB=atan(1)/45 und damit auch BTOG=1/GTOB. [ - Antworten - Zitieren - Direktlink - ] |
30.11.2003, 12:57 Uhr Ralf27 Posts: 2779 Nutzer |
Zitat: Du hast heute meinen Tag gerettet. Jea, ich habs endlich raus: x=(l1*l1+l2*l2-la*la)/(2*l1*l2) : REM Kosinussatz w=ATN(SQR(1-x*x)/x)/(ATN(1)/45) : REM Brechnung Grad Somit habe ich *endlich* bei w denn Winkel in Grad. :-) Danke! :-) -- http://www.alternativercomputerclub.de.vu [ - Antworten - Zitieren - Direktlink - ] |
30.11.2003, 14:18 Uhr AchimStegemann Posts: 112 Nutzer |
Du musst bei folgendem noch acht geben! Die Formel für acos(x) ist für Null nicht definiert. In diesem Fall musst du eine Abfrage machen, sonst kommt ein 'Division by zero' Meldung. if x==0 then w=PI/2 else w=atan(sqrt(1-x*x)/x endif oder so.. wie Basic auch immer aussehen mag [ - Antworten - Zitieren - Direktlink - ] |
30.11.2003, 14:41 Uhr Ralf27 Posts: 2779 Nutzer |
Zitat: Danke für denn Hinweis, sowas in der Art habe ich schon gemacht. In Basic würde das z.b. so aussehen if x=0 then w=PI/2 else w=ATN(SQR(1-x*x)/x) end if oder so: IF x=0 THEN w=PI/2 ELSE w=ATN(SQR(1-x*x)/x) Da gibt es einige Möglichkeiten. :-) -- http://www.alternativercomputerclub.de.vu [ - Antworten - Zitieren - Direktlink - ] |
30.11.2003, 16:57 Uhr Wishmaster Posts: 140 Nutzer |
Das Nachkucken im Mathebuch ist immer gut. Ich fänds aber trotzdem einen besseren Programmierstil mal nachzukucken wie du die AmigaOS-Funtionien mit deinem compiler nutzen kannst. [ - Antworten - Zitieren - Direktlink - ] |
-1- | [ - Beitrag schreiben - ] |
amiga-news.de Forum > Programmierung > Winkelfunktionen... | [ - Suche - Neue Beiträge - Registrieren - Login - ] |
Impressum |
Datenschutzerklärung |
Netiquette |
Werbung |
Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten. |