Avatar billede bramsing Nybegynder
18. januar 2009 - 01:52 Der er 8 kommentarer og
1 løsning

Kompas function e.lig.

Er der en der kan give et eksempel på hvordan man regner i grader ??

Hvis jeg har eksv. 2 kurser på hhv. 039 og 219 og vinden kommer fra 180 skal jeg kunne beregne hvilken af de 2 kurser der ligger tættest på (i dette tilfælde er den sidste)
Avatar billede arne_v Ekspert
18. januar 2009 - 01:58 #1
Nu er jeg total landkrabbe, men er det ikke bare at finde den kurs hvor forskellen
til vindretningen er mindst.

Altså at Abs(219-180) er mindre end Abs(39-180).
Avatar billede erikjacobsen Ekspert
18. januar 2009 - 09:54 #2
Der må være et problem omkring 360 grader. 1 grad vil tættere på 359 end 356.
Avatar billede bramsing Nybegynder
18. januar 2009 - 12:08 #3
Kan man lave det via DegToGrad, DegToRad e.lign. og i så fald, må jeg ønske et eksempel ?? :-)
Avatar billede bramsing Nybegynder
18. januar 2009 - 16:17 #4
arne_v.. Jeg er ikke sikker på jeg kan bruge dit forslag, da hvis vinden nu kom fra 350 ville det gå galt (nok det erikjacobsen skriver/mener)

Jeg lukker spørgsmålet igen og opretter et nyt der (forhåbentligt) beskriver det hele lidt bedre...
Avatar billede arne_v Ekspert
18. januar 2009 - 19:05 #5
Det kan man jo nemt kompensere for:

function nearwind(v1, v2, wind : real) : double;

var
  xv1, xv2 : double;

begin
  xv1 := abs(v1 - wind);
  xv2 := abs(v2 - wind);
  xv1 := min(xv1, 360 - xv1);
  xv2 := min(xv2, 360 - xv2);
  if xv1 < xv2 then begin
    nearwind := v1;
  end else begin
    nearwind := v2;
  end;
end;
Avatar billede bramsing Nybegynder
18. januar 2009 - 20:21 #6
arne_v det ser faktisk okay ud... Mit problem er så at det ikke altid er 2 kurser der ligger til grund.. men et sted mellem 2 og 10 der skal vurderes..

De ligger i en ini-fil på følg. måde

[omraade1]
HDN1=010
HDN2=190
HDN3=060
HDN4=240

[omraade2]
HDN1=110
HDN2=290
HDN3=040
HDN4=220
HDN5=120
HDN6=300

Når jeg i listbox vælger eksv. omraade1 så sker der en ReadSectionValues i ini-filen hvor den skriver HDN1, HDN2 .. .. .. .. ind i listbox2..
Samtidigt skal den ud fra en difineret vindretning finde den HDN i inifilen der ligger tættest på og skrive den i en Label..
Jeg håber ikke det er sortsnak...

Jeg har oprettet spørgsmålet: http://www.eksperten.dk/spm/860284 som omhandler det samme, der (i skrivende stund) fortsat er åbent :-)
Avatar billede arne_v Ekspert
18. januar 2009 - 20:46 #7
Den er nem at lave til at køre på array:

function nearwind(v : array of double; wind : double) : integer;

var
  xv, minxv : double;
  i, minix : integer;

begin
  minxv := 360;
  minix := -1;
  for i := low(v) to high(v) do begin
    xv := abs(v[i] - wind);
    xv := min(xv, 360 - xv);
    if xv < minxv then begin
      minxv := xv;
      minix := i;
    end;
  end;
  nearwind := minix;
end;
Avatar billede bramsing Nybegynder
18. januar 2009 - 21:56 #8
Hmm... Jeg har prøvet forskelligt.. men uden held :-(

Jeg har tilføjes Math i uses..
Kopieret functionen ind..

Kalder den på følgene måde for at teste tilslutninsmetoden: Label1.Caption := 'Use HDN: '+IntToStr(nearwind([40,120,220,300],250));
Men det er nok helt forkert... Er ved at køre kold i koder :-/
Avatar billede arne_v Ekspert
19. januar 2009 - 04:36 #9
Det der burde sætte Label1.Caption til 'Use HDN:2' - jeg aner ikke om det er rigtigt
eller forkert.
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