Hmm.. Det ser interessant ud.. og som det står kan jeg også få det til at virke... Som jeg lige har skrevet i det gamle spørgsmål, så er mit problem at det ikke altid er 2 kurser der ligger til grund.. men et sted mellem 2 og 10 der skal vurderes..
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 kan ikke lige hitte ud af at få jeres eksempler drejet over i det mere dynamiske :-(
Du kan lave noget i retning af nedenstående. Din opgave er herefter at få indlæst områderetningerne i OmrText. Se evt i Delphi-hjælpen om tStrings / tStringlist
var v1,v2,pi360,P2,Pmax : float; OmrText: array[1..20] of string; i, AntalElementer : integer; // i område.
v1 := StrTofloat(edit1.text); V := -1; // blot for at kunne se om der er fundet nogen Pmax := -1; Pi360 := 3.141592/360; for i:= 1 to AntalElementer do begin v2 := StrTofloat(OmrText[i]); P2 := COS(Pi360*V2)* COS(Pi360*V1) + SIN(Pi360*V2)*SIN(Pi360*V1); if P2>Pmax then begin Pmax:= P2; V := OmrText[i]; end; end; Din vindretning indlæses i edit1. Dine områder indlæses i arrayet OmrText V er herefter den retning der passer bedst ....
Der findes et unit der letter brugen af inifiles. Inkluder 'inifiles' i din uses. herefter kan du f.eks skrive: (Der skal selvfølgelig være en Button1 og en memo1 på formen)
procedure TForm1.Button1Click(Sender: TObject); var OmrText: tStringlist; IniFile : TIniFile; i:integer; begin OmrText:= tStringlist.Create; IniFile := TIniFile.Create('c:\test.ini') ; inifile.ReadSection ('sektion1',OmrText); for i:= 0 to OmrText.Count-1 do memo1.lines.add(OmrText.strings[i]); end;
begin OmrText:= tStringlist.Create; inifile.ReadSectionValues (combobox1.Text,OmrText); Pmax := -1; try v1 := StrTofloat(edit1.text); except messagebox(0,'Fejl ved int.konvertering','',0); end; Pi360 := 3.141592/360; Memo1.Clear; for i:= 0 to OmrText.Count-1 do begin memo1.lines.add(OmrText.strings[i]);
v2 := StrTofloat(copy(OmrText.strings[i],pos('=',OmrText.strings[i])+1,30)); P2 := COS(Pi360*V2)* COS(Pi360*V1) + SIN(Pi360*V2)*SIN(Pi360*V1); if P2>Pmax then begin Pmax:= P2; Vs := OmrText.strings[i]; end; label1.Caption := Vs; end; omrText. Free; end;
a nor.. Du har fat i noget der... Dog er der problemer omkring kurs 0 og 359... Jeg har testet 2 kurser hhv. 030 og 290.. Når Vinden er kurs 359 viser den at det er kurs 290 (69 fra og hvor der er 31 til 030) der er tættest på. Når Vinden er kurs 0 viser den at det er kurs 030 (30 fra) der er tættest på..
Jeg prøver at kigge lidt mere på den for at se om jeg kan få den til at makke ret :-D
a nor << Jeg tror jeg fik den til at virke... Jeg skiftede "Pi360 := 3.141592/360;" ud med "Pi360 := (2*3.141592)/360;" og så virkede det... Lægger du et svar så kvittere jeg med Point og et MEGET STORT tak for hjælpen :-)
Jeg synes efterhånden at mange svar her på siden tangerer talemåden "At skyde gråspurve med kanoner". Man burde måske gå i retning af KISS princippet "Keep It Simpel Stupid".
Lav følgende funktion, som beregner forskellen mellen to vinkler:
function TForm1.DeltaVinkel(B, W: Integer):Integer; begin Result := Abs(B-W); if Result > 180 then // Hvis vinklen er over 180 grader, så er det den anden vej rundt; Result := 360 - Result; end;
Så er det jo bare at køre en løkke som sammenligner alle vinkler, og udvælger den mindste.
Anton og arne_v Jeg havde nu ikke det store problem i at finde den nærmeste kurs udfra 2 kurser... Mit problem lå i at der var et sted mellem 2 og 10 kurser i forskellige områder som jeg nærmere beskrev i kommentaren fra 18/01-2009 20:24:29...
Mit hoved problem lå i at trække kurserne ind i et array, stringlist e.lign. og der lave en samlet beregning og vælge den kurs der lå tætest på vindens retning...
Jeg kan ikke se at jeres løsning kom ind på det...
Kald mig bare stupid hvis du har overskud til det... Jeg har aldrig påstået at jeg var proff eller noget.. og hvis jeg var oprettede jeg sq nok heller ikke spørgsmål herinde... Da jeg har valgt a_nor's løsning tilfalder point til ham.. I andre er velkommen til at få point også.. Jeg opretter gerne et point spørgsmål til jer..
Undskyld at jeg spørger dumt. Men, a_nor, hvor er guldkornene begravet med hensyn til sinus, cosinus og PI?
>Bramsig, det var nu ikke dig jeg hentydede til da jeg brugte udtrykket stupid, men alle dem her på siden der kommer med meget lange løsninger på simple problemer.
Mit forslag løser det problem der er formuleret i spørgsmålet, jeg kan godt se at spørgsmålet er vokset hen ad vejen. Jeg synes det er helt fint at a_nor fik dine point, da han leverede en brugbar løsning til dig.
>anton_kruse_andersen Hvad mener du med guldkorn ? I spørgsmålets formulering blev der spurgt om sin(), cos() kunne anvendes. Det kan de jo som du ser, og så kom den løsning mindre end ½ time efter spørgsmålet blev stillet mens din var flere dage undervejs :-). Så om det er at gå over åen, tjaa. >Bramsig Alle spørgsmål er velkomne. Det er jo kun den vej man får øget sin viden.
Hej a_nor, jeg kan se at sin og cos kan bruges, men hvad er formålet? Jeg kunne vel også spørge Monberg og Thorsen om jeg kunne låne/leje en af deres byggekraner til at bygge et legehus, og de ville sansynligvis svare ja. Men derfor kan man da stadigvæk lige så godt bruge en simplere løsning. Det er det jeg mener med "Keep It Simpel".
Det her er ikke et forsøg på at stjæle dine point. Og jeg giver dig ret i at alle spørgsmål er velkomne.
Mht. at mit svar var længe undervejs, min pc led under et mærkeligt "virus" angreb. Jeg ville selvfølgelig teste mit svar før det blev afsendt, det lille program jeg skrev for at teste det, blev fanget af AVG og betegnet som et hack værktøj. Efter utallige scan med flere forskellige antivirus, var det program jeg lige havde lavet det eneste de fandt som var virus befængt. og dette mærkelige problem skulle jeg da lige have styr på først.
Synes godt om
Ny brugerNybegynder
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.