Avatar billede pedepede Nybegynder
21. april 2005 - 14:18 Der er 11 kommentarer og
1 løsning

Bestemmelse gradtallet i et koordinatsystem

Hej
Er der nogen der kan fortælle mig, hvordan jeg finder en vinkel i grader mellem koordinaterne (0,0) og et vilkårligt punkt i et koordinatsystem. Således at (5,5) = 45 grader, (-100,0) = 180 grader (0,-4) = 270 grader osv...

Kan det stilles op på en eller anden formel så jeg kan bruge det i fx. Python

Mvh
Peter
Avatar billede arne_v Ekspert
21. april 2005 - 14:41 #1
Det er jo den rene matematik.

Hvis jeg husker rigtigt så er vinklen til et punkt (x,y) lig med atan(y/x)
Avatar billede arne_v Ekspert
21. april 2005 - 14:42 #2
De fleste programmerings sprog har en atan funktion (jeg ved ikke hvordan man
kalder den i Python)
Avatar billede stefanfuglsang Juniormester
21. april 2005 - 14:48 #3
Rigtig nok, arne_v, men husk fortegnet; atan(y/x) virker kun i første kvadrant.
mange programmeringssprog har en atan2(y,x), der tager højde for fortegnet, ellers må man selv teste for om x hhv. y er positiv eller negativ
Avatar billede stefanfuglsang Juniormester
21. april 2005 - 14:49 #4
... og resultatet vil oftest være i radianer. Gang resultatet med 180/pi (57.3)
Avatar billede jhertel Nybegynder
21. april 2005 - 15:58 #5
I Python:

import math
def vinkel(x,y): return math.atan2(y,x)*180/math.pi

Eksempler:

>>> vinkel(2,0)
0.0
>>> vinkel(2,2)
45.0
>>> vinkel(0,2)
90.0
>>> vinkel(-1,0)
180.0
>>> vinkel(-1,-1)
-135.0
Avatar billede jhertel Nybegynder
21. april 2005 - 16:01 #6
Og så den giver 0 til 360 grader i stedet:

def vinkel(x,y):
    v=math.atan2(y,x)*180/math.pi
    if v<0:
        return v+360
    else:
        return v


>>> vinkel(2,0)
0.0
>>> vinkel(2,2)
45.0
>>> vinkel(0,2)
90.0
>>> vinkel(-1,0)
180.0
>>> vinkel(-1,-1)
225.0
>>> vinkel(0,-1)
270.0
>>> vinkel(1,-1)
315.0
>>> vinkel(1,-0.00001)
359.9994270422049
Avatar billede pedepede Nybegynder
21. april 2005 - 16:20 #7
Jeg nærmer mig et eller andet!! Det virker med denne kode:

deltaA = self.objectA.getX() - self.objectB.model.getX()
deltaB = self.objectA.getY() - self.objectB.model.getY()

int((math.atan2(deltaB, deltaA)*180/math.pi)+180)

Grunden til at jeg bruger deltaA og deltaB er fordi koordinatsættet er placeret inde i et andet koordinatsystem. Lige nu har jeg bare det problem, at grader jeg får ud tangensfunktionen er drejet 90 grader (mod uret) i forhold til det andet koordinatsystem. Ved I hvordan jeg får det drejet så de 2 koordinatsystemer er ens?
Avatar billede jhertel Nybegynder
21. april 2005 - 16:24 #8
Det lyder som et helt nyt spørgsmål...
Avatar billede jhertel Nybegynder
21. april 2005 - 16:27 #9
Hvis dine gradtal er forkerte er det vel blot et spørgsmål om at trække 90 fra eller lægge dem til...
Avatar billede pedepede Nybegynder
21. april 2005 - 16:35 #10
Men så risikerer jeg jo at få et gradtal på 360+90 grader. Det er vel ikke helt ok?
Avatar billede jhertel Nybegynder
21. april 2005 - 16:38 #11
I princippet er det helt ok, da alle gradtal sådan set er gyldige i matematikken. Men du kan jo lave et tjek på, om det bliver større end 360 grader, og så trække 360 fra, hvis det gør det.
Avatar billede pedepede Nybegynder
21. april 2005 - 16:48 #12
Ok. Jeg tror jeg har fået rigeligt hjælp nu. Takker for du gode svar fra alle. jhertel er den eneste som har givet et "Svar", så alle points ryger til ham. Håber det er ok.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester