amiga-news DEUTSCHE VERSION
.
Links| Forums| Comments| Report news
.
Chat| Polls| Newsticker| Archive
.

amiga-news.de Forum > Programmierung > Winkelfunktionen... [ - Search - New posts - Register - Login - ]

-1- [ - Post reply - ]

2003-11-29, 23:29 h

Ralf27
Posts: 2779
User
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. ]

[ - Answer - Quote - Direct link - ]

2003-11-29, 23:38 h

Kronos
Posts: 1168
User
:dance3: :dance3:

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

[ - Answer - Quote - Direct link - ]

2003-11-29, 23:47 h

Ralf27
Posts: 2779
User
Zitat:
Original von Kronos:
:dance3: :dance3:

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


Dies Bewerkstellige ich oben ja auch schon, das ist nicht das Problem.

Zitat:
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



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

[ - Answer - Quote - Direct link - ]

2003-11-29, 23:52 h

Ralf27
Posts: 2779
User
Oder kann man die Funktion ACOS auch irgendwie mit anderen Funktionen "umschreiben"?
--
http://www.alternativercomputerclub.de.vu

[ - Answer - Quote - Direct link - ]

2003-11-29, 23:52 h

Kronos
Posts: 1168
User
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 :lickout:

MfG
Kronos
--

Only the good die young all the evil seem to live forever

[ - Answer - Quote - Direct link - ]

2003-11-30, 00:00 h

Ralf27
Posts: 2779
User
Zitat:
Original von Kronos:
Schau doch erstmal etwas genauer nach ob es nicht doch irgentetwas
für ACos() gibt, kann ja eventuell auch ArcCos oder sonstwie heissen.

[/Quote]

Ist sicher, ist nicht vorhanden, aber dafür halt ATN, der Arcustangens.

[Quote]

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).


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:
Library-Aufrufe mit AmigaBasic sind eine Qual, hoffe das M(axon ?)Basic
da etwas ziviler ist :lickout:


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:
MfG
Kronos
--

Only the good die young all the evil seem to live forever




--
http://www.alternativercomputerclub.de.vu

[ - Answer - Quote - Direct link - ]

2003-11-30, 00:06 h

Kronos
Posts: 1168
User
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

[ - Answer - Quote - Direct link - ]

2003-11-30, 00:16 h

Ralf27
Posts: 2779
User
Zitat:
Original von Kronos:
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


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

[ - Answer - Quote - Direct link - ]

2003-11-30, 01:21 h

AchimStegemann
Posts: 112
User
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.

[ - Answer - Quote - Direct link - ]

2003-11-30, 12:57 h

Ralf27
Posts: 2779
User
Zitat:
Original von AchimStegemann:
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.


Du hast heute meinen Tag gerettet.


:rotate:

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! :-)

:D :D :D :D
--
http://www.alternativercomputerclub.de.vu

[ - Answer - Quote - Direct link - ]

2003-11-30, 14:18 h

AchimStegemann
Posts: 112
User
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
:P

[ - Answer - Quote - Direct link - ]

2003-11-30, 14:41 h

Ralf27
Posts: 2779
User
Zitat:
Original von AchimStegemann:
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
:P


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. :-)

:rolleyes: :rolleyes: :rolleyes:
--
http://www.alternativercomputerclub.de.vu

[ - Answer - Quote - Direct link - ]

2003-11-30, 16:57 h

Wishmaster
Posts: 140
User
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.

[ - Answer - Quote - Direct link - ]


-1- [ - Post reply - ]


amiga-news.de Forum > Programmierung > Winkelfunktionen... [ - Search - New posts - Register - Login - ]


.
Masthead | Privacy policy | Netiquette | Advertising | Contact
Copyright © 1998-2024 by amiga-news.de - all rights reserved.
.