/ Forside / Karriere / Uddannelse / Højere uddannelser / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Højere uddannelser
#NavnPoint
Nordsted1 1588
erling_l 1224
ans 1150
dova 895
gert_h 800
molokyle 661
berpox 610
creamygirl 610
3773 570
10  jomfruane 570
Sikkert et simpelt mat spørgsmål
Fra : Flare


Dato : 22-05-04 11:59

Hejsa. Jeg ved ikke om det er den rigtige gruppe ellers må i lige FUT´e mig.

(Problemet er releateret til en problem i et simpelt CAD program jeg er ved
at lave hvor jeg skal tvinge linie tegning til at være vinkelret)


Lad os antage at vi har et givet punkt (x,y) [origo] og et andet punkt
(x1,y1).

Hvordan beregner jeg vinkelen (FI) som denne linie danner med den fiktive
xakse som (x,y) danner? Jeg er rimlig sikker på at jeg skal antage at jeg
har en enhedscirkel med midtpunkt i (X,y) og lave noget sin,cos ift. til den
nye koordinat.

Jeg kan bare ikke lige greje det. Nogen af jer der kan diske op med en
(sikkert simpel formel)

grader (deg/rad) = en beregning på baggrund af x,y,x1,y1

Takker mange gange på forhånd
Anders



 
 
Jens Axel Søgaard (22-05-2004)
Kommentar
Fra : Jens Axel Søgaard


Dato : 22-05-04 12:36

Flare wrote:

> Lad os antage at vi har et givet punkt (x,y) [origo] og et andet punkt
> (x1,y1).

> Hvordan beregner jeg vinkelen (FI) som denne linie danner med den fiktive
> xakse som (x,y) danner? Jeg er rimlig sikker på at jeg skal antage at jeg
> har en enhedscirkel med midtpunkt i (X,y) og lave noget sin,cos ift. til den
> nye koordinat.
>
> Jeg kan bare ikke lige greje det. Nogen af jer der kan diske op med en
> (sikkert simpel formel)
>
> grader (deg/rad) = en beregning på baggrund af x,y,x1,y1

B
/|
/ |
/ |
c / | a=c*sin(A)
/ |
/ |
-------
A b=c*cos(A)

På baggrund a x,y,x1 og y1 kan du udregne længderne a og b.
Problemet er nu at bestemme vinklen A. Fidusen er at dividere
de to:

a c * sin(A)
--- = ------------ = tan (A)
b c * cos(A)

Det betyder, at du kan udregne A ved at benytte den omvendte
function af tangens.

-1 a
A = tan ( --- )
b

Den hedder sandsynligvis atan eller arctan i dit programmeringssprog.

> (Problemet er releateret til en problem i et simpelt CAD program jeg er ved
> at lave hvor jeg skal tvinge linie tegning til at være vinkelret)

Hvis du har en linje med retningsvektor (u,v) [m.a.o. når man går u
hen går man v op] så er en af retningsvektorene for linjen vinkelret på (u,-v).

--
Jens Axel Søgaard

Flare (22-05-2004)
Kommentar
Fra : Flare


Dato : 22-05-04 13:15

> -1 a
> A = tan ( --- )
> b

Det vil vel ikke virke hele vejen "rundt".
(x1,y1)
/
/
/
(x,y)----------------------
\
\
\
\(x1,y)

I de 2 situationer får jeg jo samme (A) da a og b er jo er ens. Eller hvad?

Mvh
Anders



Jens Axel Søgaard (22-05-2004)
Kommentar
Fra : Jens Axel Søgaard


Dato : 22-05-04 13:38

Flare wrote:

>> -1 a
>> A = tan ( --- )
>> b
>
>
> Det vil vel ikke virke hele vejen "rundt".
> (x1,y1)
> /
> /
> /
> (x,y)----------------------
> \
> \
> \
> \(x1,y)
>
> I de 2 situationer får jeg jo samme (A) da a og b er jo er ens.
> Eller hvad?

Du skal bare regne y-forskellen med fortegn.
Tallet tan(A) er positivt, hvis linjen går opad,
og negativ, hvis den går nedad.

tan( 2/3) = 0.588 radianer
tan(-2/3) = -0.588 radianer

Det eneste tilfælde, hvor metoden ikke virker,
er når linjen er lodret.

--
Jens Axel Søgaard

Jakob Blaavand (22-05-2004)
Kommentar
Fra : Jakob Blaavand


Dato : 22-05-04 13:54

On Sat, 22 May 2004 14:37:48 +0200, Jens Axel Søgaard
<usenet@soegaard.net> wrote:

>Flare wrote:
>Det eneste tilfælde, hvor metoden ikke virker,
>er når linjen er lodret.

Men det er jo også rimelig simpelt at kompensere for - man tjekker
blot om x=0 fra starten... hvis den er det, så er det så fortegnet for
y der afgør om vinklen er pi/2 eller -pi/2

/Jakob Blaavand

Jens Axel Søgaard (22-05-2004)
Kommentar
Fra : Jens Axel Søgaard


Dato : 22-05-04 14:09

Jens Axel Søgaard wrote:

> Det eneste tilfælde, hvor metoden ikke virker,
> er når linjen er lodret.

Uh. Jeg vrøvler. Metoden finder den spidse vinkel
mellem linjen og vandret.

--
Jens Axel Søgaard

Aage Andersen (22-05-2004)
Kommentar
Fra : Aage Andersen


Dato : 22-05-04 14:59


"Flare" <nomail@sorry.dk> skrev i en meddelelse
news:40af3257$0$437$edfadb0f@dread14.news.tele.dk...
> Hejsa. Jeg ved ikke om det er den rigtige gruppe ellers må i lige FUT´e
mig.
>
> (Problemet er releateret til en problem i et simpelt CAD program jeg er
ved
> at lave hvor jeg skal tvinge linie tegning til at være vinkelret)
>
>
> Lad os antage at vi har et givet punkt (x,y) [origo] og et andet punkt
> (x1,y1).
>
> Hvordan beregner jeg vinkelen (FI) som denne linie danner med den fiktive
> xakse som (x,y) danner? Jeg er rimlig sikker på at jeg skal antage at jeg
> har en enhedscirkel med midtpunkt i (X,y) og lave noget sin,cos ift. til
den
> nye koordinat.
>
> Jeg kan bare ikke lige greje det. Nogen af jer der kan diske op med en
> (sikkert simpel formel)
>
> grader (deg/rad) = en beregning på baggrund af x,y,x1,y1
>
> Takker mange gange på forhånd
> Anders
>
>

Hvis du programmere i C eller C++ har du funktionen atan2(y, x). Den går
hele vejen rundt.

Din udregning bliver derfor:

grader = (180 / pi) * atan2(y1 - y, x1 - x)

bemærk at y kommer før x og atan2 giver vinklen i radianer, som omregnes til
grader idet

pi radianer = 180 grader.

Funktionen findes også i andre sprog. Såvidt jeg ved er den fast indbygget i
computerens CPU, så den er også simpel at bruge i assembler

Aage



Flare (22-05-2004)
Kommentar
Fra : Flare


Dato : 22-05-04 15:09

Efter at have spist frokost begyndte min hjerne igen at virke og jeg kom
frem til følgende (Som virker glimrende)

float a = (Y1 - Y) / (X1 - X);
if(a < 1)
{ // Lav linie vandret }
else
{ // Lav linie lodret}

Det må også beregningsmæssigt være lidt lettere end at skulle lave sin /
cos...

Anders



Jonas Møller Larsen (23-05-2004)
Kommentar
Fra : Jonas Møller Larsen


Dato : 23-05-04 12:40

Flare wrote:
> Efter at have spist frokost begyndte min hjerne igen at virke og jeg kom
> frem til følgende (Som virker glimrende)
>
> float a = (Y1 - Y) / (X1 - X);
> if(a < 1)
> { // Lav linie vandret }
> else
> { // Lav linie lodret}

Kan du udelukke, at a (også kendt som linjens hældningskoefficient) kan
være negativ? Hvis ikke, ville jeg overveje at erstatte (a < 1) med
(abs(a) < 1) - afhængigt af hvad du prøver at opnå selvfølgelig.

--
Jonas Møller Larsen

Anders Lund (23-05-2004)
Kommentar
Fra : Anders Lund


Dato : 23-05-04 18:34

"Flare" <nomail@sorry.dk> skrev i en meddelelse
news:40af5f0f$0$484$edfadb0f@dread14.news.tele.dk...
> Efter at have spist frokost begyndte min hjerne igen at virke og jeg kom
> frem til følgende (Som virker glimrende)
>
> float a = (Y1 - Y) / (X1 - X);

Husk at tjeke for X1=X, da det vil resultere i at du dividere med 0 og så
vil programmet fejle.

Mvh
Anders Lund



Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408847
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste