/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
Tegn med canvas
Fra : Monie Jacobsen


Dato : 19-07-02 06:34

Hej

Har du en løsning på hvordan jeg få tegnet den profil, der er vedhæftet som
billede.
Sådan ser midt udgangspunkt ud, men har ikke styr på det!

procedure TForm1.Button2Click(Sender: TObject);
Type
XArrayType = Array [1..20] of Real;
YOpArrayType = Array [1..20] of Real;
YNedArrayType = Array [1..20] of Real;

Var
X : XArrayType;
YOp : YOpArrayType;
YNed : YNedArrayType;
N,x1,y1,y2 :Integer;

begin
For n:= 1 to 3 do begin
X[n] := 1.25; Yop[n] := 3.07; Yned[n] := -1.79;
X[n] := 2.50; Yop[n] := 4.18; Yned[n] := -2.48;
X[n] := 5.00; Yop[n] := 5.74; Yned[n] := -3.27;
OSV.

x1:= Round(x[n]);
y1:= Round(Yop[n]);
y2:= Round(Yned[n]);
y1:=(Screen.Height div 2)-y1; { Star midt i venstre side }


canvas.LineTo(x1,y1); {ønsker tegnet billede!


end; ---------------------------------------------
-------
end;
end.





MVH og på forhånden mange tak!
Monie
E-mail: monie@tdcadsl.dk



begin 666 clip_image001.gif
M1TE&.#EA$0$E`'<`,2'^&E-O9G1W87)E.B!-:6-R;W-O9G0@3V9F:6-E`"'Y
M! $`````+ $``0`0`2,`@ ````````++#(ZIR^T/HYRTVHNSWM?P#X;B2):F
MZ)WJRK;N"Z;P3-?VC<GXSO?^J?L)A\3B(FA,*I<S)/,)C6Z<TJKUJJ!BMURF
MM@L.][[BLOE%/JO7I#3[#>_$Y_1I_8Z7N/-\^+X/:/872 @V6(AX%7"8V BU
MZ!@YLDA9:4E9@BFYZ7!I:>$96CD!R>D86J5I6N<I6+I:UDJG"ALE2TA;.X:Z
MFJO;<OM[Y"L\=5G<08S<^;D<TNP,<!S-(OI:R$O]8\W=[?T-KGP@JEV>86W^
$4 ``.P``
`
end

begin 666 clip_image002.gif
M1TE&.#EA*@`,`'<`,2'^&E-O9G1W87)E.B!-:6-R;W-O9G0@3V9F:6-E`"'Y
M! $`````+ ```0`I``H`@ ````````(?C(]YP.T/HWQFVGL#WIRM#DY?2#IC
,658HJJ[DZ79(`0`[
`
end

begin 666 clip_image003.gif
M1TE&.#EA\@`B`'<`,2'^&E-O9G1W87)E.B!-:6-R;W-O9G0@3V9F:6-E`"'Y
M! $`````+ $``@#P`!\`@ ````````*^A(^IR^T7HIRTVHNS?+S[#X;B2);&
M9*:=%JGN"\<RU,[V6MWZSHM;#WSD@L2BZV=,-BC*IO.$?$H5T:E5-;QJJ=6M
ME]O]BA&H\39L3H,#ZF:M#>>4X[HW_2Y$XWWLO1]G]X<C2.C!5,B%J/B1M:>W
M")G7U_88:2E7Z11XR4F2"337*9H2&O0YBAI2:K.9Z@JS^BH+USIK.U9[JZN5
DN^O[U/LK;'0Z;%P7?*Q\$[OLS)S\+$U:/&T-4GVM+1E0```[
`
end


 
 
Klaus Petersen (19-07-2002)
Kommentar
Fra : Klaus Petersen


Dato : 19-07-02 12:49

> Var
> X : Array [1..20] of Real;
> YOp : Array [1..20] of Real;
> YNed : Array [1..20] of Real;

Dine typer består kun af et array - derfor ville jeg flytte det ned til dine
variabelerklæringer som ovenstående

> n,x1,y1,y2 :Integer;

Jeg ved godt at der ikke er forskel på store og små bogstaver i delphi - men
det er en god skik at holde dem helt ens.

> begin
> For n:= 1 to 3 do begin
> X[n] := 1.25; Yop[n] := 3.07; Yned[n] := -1.79;
> X[n] := 2.50; Yop[n] := 4.18; Yned[n] := -2.48;
> X[n] := 5.00; Yop[n] := 5.74; Yned[n] := -3.27;

Det der vil ikke virke efter hensigten!
Det skal være:

X[1] := 1.25; Yop[1] := 3.07; Yned[1] := -1.79;
X[2] := 2.50; Yop[2] := 4.18; Yned[2] := -2.48;
X[3] := 5.00; Yop[3] := 5.74; Yned[3] := -3.27;

Ellers tildeler du bare 5.00 til alle X'er og 5.74 til alle Yop'er og -3.27
til alle Yned'er.

> OSV.

Du bør altid poste alt din kode!

> x1:= Round(x[n]);
> y1:= Round(Yop[n]);
> y2:= Round(Yned[n]);

> y1:=(Screen.Height div 2)-y1; { Star midt i venstre side }

Her laver du en beregning udfra din skærms opløsning? Hvad så hvis du
flytter vinduet,
så passer det ikke længere.

> canvas.LineTo(x1,y1); {ønsker tegnet billede!

Her tegner du på selve formen. Hvis du minimerer dit program, er billedet
væk når du gendanner. Sæt i stedet for en TImage komponent ind på din form
(den ligger under Additional) - så forsvinder billedet ikke.

Det er absolut ikke klart, hvad du egentlig prøver at opnå og da slet ikke
hvordan. Hvor kommer den profil fra - og hvad skal du bruge det til? Hvis du
kan forklare din problemstilling lidt bedre, ville det være meget lettere at
hjælpe.

procedure TForm1.Button3Click(Sender: TObject);
var
Xdiff, Ydiff : array [0..4] of real;
curX, curY : real;
count : integer;
begin

// bare for at sætte dem til et eller andet
curX := 0;
curY := image1.height / 2;

Xdiff [0] := 15; Ydiff [0] := 15;
Xdiff [1] := 15; Ydiff [1] := -5;
Xdiff [2] := 15; Ydiff [2] := -10;
Xdiff [3] := 13; Ydiff [3] := 25;
Xdiff [4] := 20; Ydiff [4] := 60;

count := 0;
repeat;
image1.canvas.MoveTo (round (curX), round (curY));
curX := curX + Xdiff [count];
curY := curY + Ydiff [count];
image1.canvas.LineTo (round (curX), round (curY));
inc (count);
until (count = 5);
end;

------------

procedure TForm1.Button3Click(Sender: TObject);
var
Xdiff, Ydiff : array [0..4] of real;
curX, curY : real;
count : integer;
begin

// bare for at sætte dem til et eller andet
curX := 0;
curY := image1.height / 2;

Xdiff [0] := 15; Ydiff [0] := 15;
Xdiff [1] := 15; Ydiff [1] := -5;
Xdiff [2] := 15; Ydiff [2] := -10;
Xdiff [3] := 13; Ydiff [3] := 25;
Xdiff [4] := 20; Ydiff [4] := 60;

count := 0;
repeat;
image1.canvas.MoveTo (round (curX), round (curY));
curX := curX + Xdiff [count];
curY := curY + Ydiff [count];
image1.canvas.LineTo (round (curX), round (curY));
inc (count);
until (count = 5);

end;




Monie Jacobsen (19-07-2002)
Kommentar
Fra : Monie Jacobsen


Dato : 19-07-02 18:35

Hej
Tegning af vingeprofil (NASA-profil serie).
For bedere at kunne forklare, hvad det er, jeg ønsker der skal tegnes.
Har jeg lagt et billede i news:dk.binaer under emnet "vingeprofil ang.
dk.edb.pascal".
For bedre at kunne forklare, hvad det er jeg vil med spørgsmålene.

Jeg ønsker, at kunne tegne den vingeprofil med nedstående procedure.
Men kender ikke noget til, at tegne med Canvase!
Men ved Klaus Petersen hjælp, er jeg nået så lang som nedenfor beskrevet.
Jeg er ved at lave et vindmølle program, der kan beregne en husstandsmølle
25 Kw/h.
Udover at lave programmet, håber jeg også, igennem et sådan målrette
projekt, at lære Delphi at kende.
Afprøv proceduren.
Ved afprøvningen tegnes vingeprofilet, kun den ene side, men på hovede?
Som det er nu, virker den del, der skal tegne den nederste skald ikke:
Yned[1] Se JPG-filen!
Håber meget, nogen vil få programmet til at kunne tegne vingeprofilet!


procedure TForm1.Button2Click(Sender: TObject);
Var
X, YOp, YNed : Array [0..18] of Real;
curX, curY : real;
count : integer;

begin
curX:=0;
curY:= Image1.Height /2;

X[0] := 0.00; Yop[1] := 0.00; Yned[1] := 0.00;
X[1] := 1.25; Yop[1] := 3.07; Yned[1] := -1.79;
X[2] := 2.50; Yop[2] := 4.18; Yned[2] := -2.48;
X[3] := 5.00; Yop[3] := 5.74; Yned[3] := -3.27;
X[4] := 7.50; Yop[4] := 6.91; Yned[4] := -3.71;
X[5] := 10.00; Yop[5] := 7.84; Yned[5] := -3.98;
X[6] := 15.00; Yop[6] := 9.27; Yned[6] := -4.18;
X[7] := 20.00; Yop[7] := 10.25; Yned[7] := -4.15;
X[8] := 25.00; Yop[8] := 10.92; Yned[8] := -3.98;
X[9] := 30.00; Yop[9] := 11.25; Yned[9] := -3.75;
X[10] := 40.00; Yop[10] := 11.25; Yned[10] := -3.25;
X[11] := 50.00; Yop[11] := 10.53; Yned[11] := -2.72;
X[12] := 60.00; Yop[12] := 9.30; Yned[12] := -2.14;
X[13] := 70.00; Yop[13] := 7.63; Yned[13] := -1.55;
X[14] := 80.00; Yop[14] := 5.55; Yned[14] := -1.03;
X[15] := 90.00; Yop[15] := 3.08; Yned[15] := -0.57;
X[16] := 95.00; Yop[16] := 1.67; Yned[16] := -0.35;
X[17] := 100.00; Yop[17] := 0.16; Yned[17] := -0.16;
X[18] := 0.00; Yop[18] := 0.00; Yned[18] := 0.00;

count:=0;
repeat

{ Round(Yned[count]); Mangler! }

Image1.Canvas.MoveTo( Round(curX), Round(curY) );
curX := curX + Round(X[count]);
curY := curY + Round(Yop[count]);
image1.Canvas.LineTo( Round(curX), Round(curY) );

inc(count);
until(count = 18);
end;


Forløbende en stor tak til Klaus Petersen og Juno

På forhånden mange tak!

Med venlig hilsen
Monie Jacobsen

Ved spørgsmål, send mig en email, med dit telf.nr. og jeg ringer dig op.
E-mail: monie@tdcadsl.dk




Klaus Petersen (19-07-2002)
Kommentar
Fra : Klaus Petersen


Dato : 19-07-02 19:50

> Har jeg lagt et billede i news:dk.binaer under emnet "vingeprofil ang.
> dk.edb.pascal".

Jeg har desværre ikke adgang til dk.binaer.

> Ved afprøvningen tegnes vingeprofilet, kun den ene side, men på hovedet?

Ja - det er en normal egenskab billeder har i windows.
Kordinaten 0,0 er i øverste, venstre hjørne og image1.width, image1.height
er i nedeste højre hjørne - hvilket jo er omvendt i forhold til
matematikkens XY koordinatsystem.

Men man kan korrigere for dette ved at sige image1.height - Y_koordinaten
(se koden som jeg har postet med).

> Som det er nu, virker den del, der skal tegne den nederste skald ikke:
> Yned[1] Se JPG-filen!

Det har jeg løst ved 2 sæt variabler - curX, curX2, curY, curY2 - som hver
især holder styr på sin side af profilen.

Her er så mit bud på en færdig procedure:

***KODE***

procedure TForm1.Button1Click(Sender: TObject);
Var
X, YOp, YNed : Array [0..18] of Real;
curX, curY : real;
curX2, curY2 : real;
count : integer;

begin
curX:=0;
curY:= Image1.Height / 2;
curX2:=0;
curY2:= Image1.Height / 2;

X[0] := 0.00; Yop[1] := 0.00; Yned[1] := 0.00;
X[1] := 1.25; Yop[1] := 3.07; Yned[1] := -1.79;
X[2] := 2.50; Yop[2] := 4.18; Yned[2] := -2.48;
X[3] := 5.00; Yop[3] := 5.74; Yned[3] := -3.27;
X[4] := 7.50; Yop[4] := 6.91; Yned[4] := -3.71;
X[5] := 10.00; Yop[5] := 7.84; Yned[5] := -3.98;
X[6] := 15.00; Yop[6] := 9.27; Yned[6] := -4.18;
X[7] := 20.00; Yop[7] := 10.25; Yned[7] := -4.15;
X[8] := 25.00; Yop[8] := 10.92; Yned[8] := -3.98;
X[9] := 30.00; Yop[9] := 11.25; Yned[9] := -3.75;
X[10] := 40.00; Yop[10] := 11.25; Yned[10] := -3.25;
X[11] := 50.00; Yop[11] := 10.53; Yned[11] := -2.72;
X[12] := 60.00; Yop[12] := 9.30; Yned[12] := -2.14;
X[13] := 70.00; Yop[13] := 7.63; Yned[13] := -1.55;
X[14] := 80.00; Yop[14] := 5.55; Yned[14] := -1.03;
X[15] := 90.00; Yop[15] := 3.08; Yned[15] := -0.57;
X[16] := 95.00; Yop[16] := 1.67; Yned[16] := -0.35;
X[17] := 100.00; Yop[17] := 0.16; Yned[17] := -0.16;
X[18] := 0.00; Yop[18] := 0.00; Yned[18] := 0.00;

count:=0;
repeat

Image1.Canvas.MoveTo( Round (curX2), image1.height - Round (curY2) );
curX2 := curX2 + Round(X[count]);
curY2 := curY2 + Round(Yned[count]);
image1.Canvas.LineTo( Round(curX2), image1.height - Round(curY2) );

Image1.Canvas.MoveTo( Round(curX), image1.height - Round(curY) );
curX := curX + Round(X[count]);
curY := curY + Round(Yop[count]);
image1.Canvas.LineTo( Round(curX), image1.height - Round(curY) );

inc(count);
until(count = 19);
end;

***/KODE***

until(count = 19); >> en lille kommentar til det her:

count skal være lig med 19, når løkken skal afsluttes. Årsagen til dette er,
at count tælles op lige før at udtrykket (count=19) kontroleres for værende
falsk. Og da du har brugt op til plads nr. 18 i de 3 array's, skal udtrykket
altså blive falsk, når den vil til at tegne plads nr. 19 i array'et.

Hvis det nu skulle være rigtigt fint, kunne man lave så tegningen blev
tilpasset canvas'et ved, at multiplikere input dataene med en faktor, som er
afhængig af canvas størrelse (man kunne kalde den for en scaleringsfaktor).
Men hvis du kun har én canvas størrelse, er det nok lidt at skyde duer med
kanoner.

mvh.
Klaus.



Monie Jacobsen (20-07-2002)
Kommentar
Fra : Monie Jacobsen


Dato : 20-07-02 07:19

Tak Klaus.

Jeg får en fejlemddelse når jeg Run procedur'en.
"Debugger Exeption Notification
Project project1.exe raised exception class EInvalidOp with message
'Invalid floating point operation'
Process stopped. Use step or un to continue."

Så derfor har jeg ikke kunne se resultstet af dit forslag.
Men forslaget om at tilføje funktionen Zoom, scaleringsfaktorer er meget
fint!
Tilpasset canvas'et ved, at multiplikere input dataene med en faktor, som er
afhængig af canvas størrelse.

Juno, har også kommet med et forslag, hvor han tilføjer funktionen Zoom.

Er det ikke sådan Juno har lavet i sit forslag, du også havde tænkt dig?
"En SpinEdit til zoom, eller noget smartere som Klaus foreslår, at prøve at
beregne den efter str. på Image-komponenten."
Har du et forslag til dette?
Det vil være allertideres, med f.eks. SpindEdit, om man kunne klikke sig
frem til et ønsket størrelseforhold (1:2 el. 1:5 osv.).

MVH
Monie

"Klaus Petersen" <spektual@hotmail.com> skrev i en meddelelse
news:ah9n1b$fi7$1@sunsite.dk...
> > Har jeg lagt et billede i news:dk.binaer under emnet "vingeprofil ang.
> > dk.edb.pascal".
>
> Jeg har desværre ikke adgang til dk.binaer.
>
> > Ved afprøvningen tegnes vingeprofilet, kun den ene side, men på hovedet?
>
> Ja - det er en normal egenskab billeder har i windows.
> Kordinaten 0,0 er i øverste, venstre hjørne og image1.width, image1.height
> er i nedeste højre hjørne - hvilket jo er omvendt i forhold til
> matematikkens XY koordinatsystem.
>
> Men man kan korrigere for dette ved at sige image1.height - Y_koordinaten
> (se koden som jeg har postet med).
>
> > Som det er nu, virker den del, der skal tegne den nederste skald ikke:
> > Yned[1] Se JPG-filen!
>
> Det har jeg løst ved 2 sæt variabler - curX, curX2, curY, curY2 - som hver
> især holder styr på sin side af profilen.
>
> Her er så mit bud på en færdig procedure:
>
> ***KODE***
>
> procedure TForm1.Button1Click(Sender: TObject);
> Var
> X, YOp, YNed : Array [0..18] of Real;
> curX, curY : real;
> curX2, curY2 : real;
> count : integer;
>
> begin
> curX:=0;
> curY:= Image1.Height / 2;
> curX2:=0;
> curY2:= Image1.Height / 2;
>
> X[0] := 0.00; Yop[1] := 0.00; Yned[1] := 0.00;
> X[1] := 1.25; Yop[1] := 3.07; Yned[1] := -1.79;
> X[2] := 2.50; Yop[2] := 4.18; Yned[2] := -2.48;
> X[3] := 5.00; Yop[3] := 5.74; Yned[3] := -3.27;
> X[4] := 7.50; Yop[4] := 6.91; Yned[4] := -3.71;
> X[5] := 10.00; Yop[5] := 7.84; Yned[5] := -3.98;
> X[6] := 15.00; Yop[6] := 9.27; Yned[6] := -4.18;
> X[7] := 20.00; Yop[7] := 10.25; Yned[7] := -4.15;
> X[8] := 25.00; Yop[8] := 10.92; Yned[8] := -3.98;
> X[9] := 30.00; Yop[9] := 11.25; Yned[9] := -3.75;
> X[10] := 40.00; Yop[10] := 11.25; Yned[10] := -3.25;
> X[11] := 50.00; Yop[11] := 10.53; Yned[11] := -2.72;
> X[12] := 60.00; Yop[12] := 9.30; Yned[12] := -2.14;
> X[13] := 70.00; Yop[13] := 7.63; Yned[13] := -1.55;
> X[14] := 80.00; Yop[14] := 5.55; Yned[14] := -1.03;
> X[15] := 90.00; Yop[15] := 3.08; Yned[15] := -0.57;
> X[16] := 95.00; Yop[16] := 1.67; Yned[16] := -0.35;
> X[17] := 100.00; Yop[17] := 0.16; Yned[17] := -0.16;
> X[18] := 0.00; Yop[18] := 0.00; Yned[18] := 0.00;
>
> count:=0;
> repeat
>
> Image1.Canvas.MoveTo( Round (curX2), image1.height - Round (curY2) );
> curX2 := curX2 + Round(X[count]);
> curY2 := curY2 + Round(Yned[count]);
> image1.Canvas.LineTo( Round(curX2), image1.height - Round(curY2) );
>
> Image1.Canvas.MoveTo( Round(curX), image1.height - Round(curY) );
> curX := curX + Round(X[count]);
> curY := curY + Round(Yop[count]);
> image1.Canvas.LineTo( Round(curX), image1.height - Round(curY) );
>
> inc(count);
> until(count = 19);
> end;
>
> ***/KODE***
>
> until(count = 19); >> en lille kommentar til det her:
>
> count skal være lig med 19, når løkken skal afsluttes. Årsagen til dette
er,
> at count tælles op lige før at udtrykket (count=19) kontroleres for
værende
> falsk. Og da du har brugt op til plads nr. 18 i de 3 array's, skal
udtrykket
> altså blive falsk, når den vil til at tegne plads nr. 19 i array'et.
>
> Hvis det nu skulle være rigtigt fint, kunne man lave så tegningen blev
> tilpasset canvas'et ved, at multiplikere input dataene med en faktor, som
er
> afhængig af canvas størrelse (man kunne kalde den for en
scaleringsfaktor).
> Men hvis du kun har én canvas størrelse, er det nok lidt at skyde duer med
> kanoner.
>
> mvh.
> Klaus.
>
>



Juno (19-07-2002)
Kommentar
Fra : Juno


Dato : 19-07-02 20:39

"Monie Jacobsen" <monie@tdcadsl.dk> skrev i en meddelelse
news:3d384dd4$0$12676$edfadb0f@dspool01.news.tele.dk
> Hej
> Tegning af vingeprofil (NASA-profil serie).
> For bedere at kunne forklare, hvad det er, jeg ønsker der skal tegnes.
> Har jeg lagt et billede i news:dk.binaer under emnet "vingeprofil ang.
> dk.edb.pascal".

Jeg kan se at Klaus kom før mig :)
Jeg har ikke set "output" fra hans rutine, ej heller fået læst den
grundigt, men jeg kan se at han har tilføjet nogle variabler, hvor jeg
har fjernet nogle :)
Jeg har fjernet "current" variablerne, og lavet en "midY", som er
halvdelen af Image1.Height, og en "zoom", som er en skalerings-ting.

Det her er så mit bud. (efter min signatur...)
Så vidt jeg har kunne regne ud er X-koordinaterne absolutte, medens
y-koordinaterne er relative.
I hvert fald giver dette et billede der ligner det i dk.binaer.
(retvendt)
Jeg har tilføjet kanonen til gråspurvene som Klaus snakkede om, nemlig
en "zoom" faktor. Om du vil lave denne zoom-værdi statisk, eller
variabel afhænger af hvordan dit program ser ud.
Du kan lave en SpinEdit til den, eller nok smartere som Klaus foreslår,
at prøve at beregne den efter str. på Image-komponenten.

--
*/*
jUno.

----- kode begynd ------
procedure TForm1.Button2Click(Sender: TObject);
var
X, Yop, Yned : array [0..18] of Real;
midY: Real;
zoom,
count: Integer;
begin
X[0] := 0.00; Yop[1] := 0.00; Yned[1] := 0.00;
X[1] := 1.25; Yop[1] := 3.07; Yned[1] := -1.79;
X[2] := 2.50; Yop[2] := 4.18; Yned[2] := -2.48;
X[3] := 5.00; Yop[3] := 5.74; Yned[3] := -3.27;
X[4] := 7.50; Yop[4] := 6.91; Yned[4] := -3.71;
X[5] := 10.00; Yop[5] := 7.84; Yned[5] := -3.98;
X[6] := 15.00; Yop[6] := 9.27; Yned[6] := -4.18;
X[7] := 20.00; Yop[7] := 10.25; Yned[7] := -4.15;
X[8] := 25.00; Yop[8] := 10.92; Yned[8] := -3.98;
X[9] := 30.00; Yop[9] := 11.25; Yned[9] := -3.75;
X[10] := 40.00; Yop[10] := 11.25; Yned[10] := -3.25;
X[11] := 50.00; Yop[11] := 10.53; Yned[11] := -2.72;
X[12] := 60.00; Yop[12] := 9.30; Yned[12] := -2.14;
X[13] := 70.00; Yop[13] := 7.63; Yned[13] := -1.55;
X[14] := 80.00; Yop[14] := 5.55; Yned[14] := -1.03;
X[15] := 90.00; Yop[15] := 3.08; Yned[15] := -0.57;
X[16] := 95.00; Yop[16] := 1.67; Yned[16] := -0.35;
X[17] := 100.00; Yop[17] := 0.16; Yned[17] := -0.16;
X[18] := 0.00; Yop[18] := 0.00; Yned[18] := 0.00;
midY := Image1.Height /2;
zoom := 4;

count:=0;
repeat
// Tegn linie fra curX til Yned.
Image1.Canvas.MoveTo( Round(X[count]*zoom),
Round(midY-Yned[count]*zoom));
Image1.Canvas.LineTo( Round(X[count+1]*zoom),
Round(midY-Yned[count+1]*zoom));

// Tegn linie fra curX til Yop.
Image1.Canvas.MoveTo( Round(X[count]*zoom),
Round(midY-Yop[count]*zoom));
Image1.Canvas.LineTo( Round(X[count+1]*zoom),
Round(midY-Yop[count+1]*zoom));

inc(count);
until(count = 19);
end;
-- kode slut --



Monie Jacobsen (20-07-2002)
Kommentar
Fra : Monie Jacobsen


Dato : 20-07-02 06:48

Tak Juno.

Det er et fint stykke arbejde du har lavet.

Jeg får en fejlemddelse når jeg Run procedur'en.
"Debugger Exeption Notification
Project project1.exe raised exception class EInvalidOp with message
'Invalid floating point operation'
Process stopped. Use step or un to continue."

Så derfor har jeg ikke kunne se resultstet af dit forslag Juno.
Men det at tilføje funktionen Zoom er meget fint!

MVH
Monie

"Juno" <bauer.juno@dinbhget2net.dk> skrev i en meddelelse
news:3d386a92$0$16796$edfadb0f@dspool01.news.tele.dk...
> "Monie Jacobsen" <monie@tdcadsl.dk> skrev i en meddelelse
> news:3d384dd4$0$12676$edfadb0f@dspool01.news.tele.dk
> > Hej
> > Tegning af vingeprofil (NASA-profil serie).
> > For bedere at kunne forklare, hvad det er, jeg ønsker der skal tegnes.
> > Har jeg lagt et billede i news:dk.binaer under emnet "vingeprofil ang.
> > dk.edb.pascal".
>
> Jeg kan se at Klaus kom før mig :)
> Jeg har ikke set "output" fra hans rutine, ej heller fået læst den
> grundigt, men jeg kan se at han har tilføjet nogle variabler, hvor jeg
> har fjernet nogle :)
> Jeg har fjernet "current" variablerne, og lavet en "midY", som er
> halvdelen af Image1.Height, og en "zoom", som er en skalerings-ting.
>
> Det her er så mit bud. (efter min signatur...)
> Så vidt jeg har kunne regne ud er X-koordinaterne absolutte, medens
> y-koordinaterne er relative.
> I hvert fald giver dette et billede der ligner det i dk.binaer.
> (retvendt)
> Jeg har tilføjet kanonen til gråspurvene som Klaus snakkede om, nemlig
> en "zoom" faktor. Om du vil lave denne zoom-værdi statisk, eller
> variabel afhænger af hvordan dit program ser ud.
> Du kan lave en SpinEdit til den, eller nok smartere som Klaus foreslår,
> at prøve at beregne den efter str. på Image-komponenten.
>
> --
> */*
> jUno.
>
> ----- kode begynd ------
> procedure TForm1.Button2Click(Sender: TObject);
> var
> X, Yop, Yned : array [0..18] of Real;
> midY: Real;
> zoom,
> count: Integer;
> begin
> X[0] := 0.00; Yop[1] := 0.00; Yned[1] := 0.00;
> X[1] := 1.25; Yop[1] := 3.07; Yned[1] := -1.79;
> X[2] := 2.50; Yop[2] := 4.18; Yned[2] := -2.48;
> X[3] := 5.00; Yop[3] := 5.74; Yned[3] := -3.27;
> X[4] := 7.50; Yop[4] := 6.91; Yned[4] := -3.71;
> X[5] := 10.00; Yop[5] := 7.84; Yned[5] := -3.98;
> X[6] := 15.00; Yop[6] := 9.27; Yned[6] := -4.18;
> X[7] := 20.00; Yop[7] := 10.25; Yned[7] := -4.15;
> X[8] := 25.00; Yop[8] := 10.92; Yned[8] := -3.98;
> X[9] := 30.00; Yop[9] := 11.25; Yned[9] := -3.75;
> X[10] := 40.00; Yop[10] := 11.25; Yned[10] := -3.25;
> X[11] := 50.00; Yop[11] := 10.53; Yned[11] := -2.72;
> X[12] := 60.00; Yop[12] := 9.30; Yned[12] := -2.14;
> X[13] := 70.00; Yop[13] := 7.63; Yned[13] := -1.55;
> X[14] := 80.00; Yop[14] := 5.55; Yned[14] := -1.03;
> X[15] := 90.00; Yop[15] := 3.08; Yned[15] := -0.57;
> X[16] := 95.00; Yop[16] := 1.67; Yned[16] := -0.35;
> X[17] := 100.00; Yop[17] := 0.16; Yned[17] := -0.16;
> X[18] := 0.00; Yop[18] := 0.00; Yned[18] := 0.00;
> midY := Image1.Height /2;
> zoom := 4;
>
> count:=0;
> repeat
> // Tegn linie fra curX til Yned.
> Image1.Canvas.MoveTo( Round(X[count]*zoom),
> Round(midY-Yned[count]*zoom));
> Image1.Canvas.LineTo( Round(X[count+1]*zoom),
> Round(midY-Yned[count+1]*zoom));
>
> // Tegn linie fra curX til Yop.
> Image1.Canvas.MoveTo( Round(X[count]*zoom),
> Round(midY-Yop[count]*zoom));
> Image1.Canvas.LineTo( Round(X[count+1]*zoom),
> Round(midY-Yop[count+1]*zoom));
>
> inc(count);
> until(count = 19);
> end;
> -- kode slut --
>
>



Juno (20-07-2002)
Kommentar
Fra : Juno


Dato : 20-07-02 07:26

"Monie Jacobsen" <monie@tdcadsl.dk> skrev i en meddelelse
news:3d38f9ac$0$13939$edfadb0f@dspool01.news.tele.dk
> Tak Juno.
Selv tak.

> Jeg får en fejlemddelse når jeg Run procedur'en.
> "Debugger Exeption Notification
> Project project1.exe raised exception class EInvalidOp with message
> 'Invalid floating point operation'
> Process stopped. Use step or un to continue."
Ja, jeg får godt nok ikke fejl i D4, hvilket nok er en fejl i D4 :)
Prøv at rette det sidste until...=19 til until...=18
inc(count);
until(count = 18);
end;
Jeg skimmede Klaus' indlæg inden jeg sendte, og syntes at det han skrev
til sidst med "until....=19" lød meget rigtigt (hvilket det også er i
hans kode), og rettede det derfor i min kode lige inden jeg trykkede
"send". Opdagede senere at det var en fejl :(
Jeg bruger jo "MoveTo X[count] - LineTo X[count+1]", så derfor skal
testen jo stoppe procedure én før.

> Så derfor har jeg ikke kunne se resultstet af dit forslag Juno.
> Men det at tilføje funktionen Zoom er meget fint!
Ja, men endnu vigtigere at X[..] er absolut, og Yop-Yned er relative !
curX = curX + X[..] skal ikke bruges, kun X[..], hvorimod curY = curY +
Y[..] er god nok.
Håber det giver mening

Jeg har lagt tegningen fra min rutine i news:dk.binaer, som svar på dit
indlæg.
Det skulle være det her ;)
news:3d3901b6$0$12676$edfadb0f@dspool01.news.tele.dk

--
*/*
jUno
spamfilter: Fjern din bh



Monie Jacobsen (21-07-2002)
Kommentar
Fra : Monie Jacobsen


Dato : 21-07-02 11:18

Hej Juno

Det virker "sku" fint Det du har lavet!
Jeg har også fået zomm funktionen til at virke.

Har du en ide til hvordan Image kan udprint'tes og med forskellige defineret
(zoom) scaleringsfaktorer med SpinEdit?

Har også stort ønske om, at kunne roter de forskellige (færdigtegnede)
vingeprofiler.
Med en afstand fra vingeprofilets forreste kant og 1/4 del hen ad x akslen,
dette er omdrejningspunktet og her er det, at jeg vil angive graderne.
f.eks. med SpinEdit,
så hele vingeprofilet drejes f.eks. 2 grader.osv.

Tegningen af vingeprofil i
news:3d3901b6$0$12676$edfadb0f@dspool01.news.tele.dk

På forhånden mange tak.

MVH
Monie
E-mail: monie@tdcadsl.dk








Juno (21-07-2002)
Kommentar
Fra : Juno


Dato : 21-07-02 12:00

Hej Monie.

Jeg har ingen erfaring med at printe fra Delphi, og dét der med at
rotere må jeg desværre også stå af fra, men måske andre har nogle
forslag ?

--
*/*
jUno



Asger Grunnet (21-07-2002)
Kommentar
Fra : Asger Grunnet


Dato : 21-07-02 12:47


Monie Jacobsen skrev:
>
> Har også stort ønske om, at kunne roter de forskellige (færdigtegnede)
> vingeprofiler.
> Med en afstand fra vingeprofilets forreste kant og 1/4 del hen ad x akslen,
> dette er omdrejningspunktet og her er det, at jeg vil angive graderne.
> f.eks. med SpinEdit,
> så hele vingeprofilet drejes f.eks. 2 grader.osv.

Jeg har ikke fulgt med i tråden indtil nu, så jeg er ikke sikker på om
det her hjælper. Jeg antager, at du har nogle punkter (x[i],y[i]) som du
gerne vil have roteret omkring et punkt (xc,yc) med en vinkel v.
De roterede punkter (xn[i],yn[i]) beregnes med:

xn[i] := (x[i]-xc)*cos(v/360 * 2*pi) - (y[i]-yc)*sin(v/360 * 2*pi) + xc;
yn[i] := (y[i]-yc)*cos(v/360 * 2*pi) + (x[i]-xc)*sin(v/360 * 2*pi) + yc;

Jeg går ud fra at koordinaterne (x[i], y[i], xn[i], yn[i], xc, yc) er erklærede
som floating-point (f.eks. double eller extended).
For at det ovenstående virker, skal du inkludere "math" i uses-listen.

Asger.



Monie Jacobsen (23-07-2002)
Kommentar
Fra : Monie Jacobsen


Dato : 23-07-02 06:40

Tak Asger

Vil du være behjælpelig med, at tilrette nedstående procedure.
Har prøvet, men uden held!

Jeg har lagt en tegningen her, så du kan se vingeprofilet.
news:3d3901b6$0$12676$edfadb0f@dspool01.news.tele.dk



PROCEDURE TForm1.Button2Click(Sender: TObject);
var
X, Yop, Yned : array [0..18] of Real;
midY,roterY,roterX: Real;
count: Integer;

begin
X[0] := 0.00; Yop[0] := 0.00; Yned[0] := 0.00;
X[1] := 1.25; Yop[1] := 3.07; Yned[1] := -1.79;
X[2] := 2.50; Yop[2] := 4.18; Yned[2] := -2.48;
X[3] := 5.00; Yop[3] := 5.74; Yned[3] := -3.27;
X[4] := 7.50; Yop[4] := 6.91; Yned[4] := -3.71;
X[5] := 10.00; Yop[5] := 7.84; Yned[5] := -3.98;
X[6] := 15.00; Yop[6] := 9.27; Yned[6] := -4.18;
X[7] := 20.00; Yop[7] := 10.25; Yned[7] := -4.15;
X[8] := 25.00; Yop[8] := 10.92; Yned[8] := -3.98;
X[9] := 30.00; Yop[9] := 11.25; Yned[9] := -3.75;
X[10] := 40.00; Yop[10] := 11.25; Yned[10] := -3.25;
X[11] := 50.00; Yop[11] := 10.53; Yned[11] := -2.72;
X[12] := 60.00; Yop[12] := 9.30; Yned[12] := -2.14;
X[13] := 70.00; Yop[13] := 7.63; Yned[13] := -1.55;
X[14] := 80.00; Yop[14] := 5.55; Yned[14] := -1.03;
X[15] := 90.00; Yop[15] := 3.08; Yned[15] := -0.57;
X[16] := 95.00; Yop[16] := 1.67; Yned[16] := -0.35;
X[17] := 100.00; Yop[17] := 0.16; Yned[17] := -0.16;
X[18] := 100.00; Yop[18] := 0.00; Yned[18] := 0.00;

midY := Image1.Height /2; // Midten af Image1
roterY:=midY; // Roterings punkt Y
roterX:=25; // Roterings punkt X Afstand fra
profilets forreste 1/4 del.

count:=0;
repeat
// Tegn linie fra curX til Yned.
Image1.Canvas.MoveTo(Round(X[count]*zoom),Round(midY-Yned[count]*zoom));

Image1.Canvas.LineTo(Round(X[count+1]*zoom),Round(midY-Yned[count+1]*zoom));

// Tegn linie fra curX til Yop.
Image1.Canvas.MoveTo( Round(X[count]*zoom),Round(midY-Yop[count]*zoom));
Image1.Canvas.LineTo(
Round(X[count+1]*zoom),Round(midY-Yop[count+1]*zoom));

inc(count);
until(count = 19);
end;


"Asger Grunnet" <asger@adslhome.dk> skrev i en meddelelse
news:3d3a9f8c$0$13965$edfadb0f@dspool01.news.tele.dk...
>
> Monie Jacobsen skrev:
> >
> > Har også stort ønske om, at kunne roter de forskellige (færdigtegnede)
> > vingeprofiler.
> > Med en afstand fra vingeprofilets forreste kant og 1/4 del hen ad x
akslen,
> > dette er omdrejningspunktet og her er det, at jeg vil angive graderne.
> > f.eks. med SpinEdit,
> > så hele vingeprofilet drejes f.eks. 2 grader.osv.
>
> Jeg har ikke fulgt med i tråden indtil nu, så jeg er ikke sikker på om
> det her hjælper. Jeg antager, at du har nogle punkter (x[i],y[i]) som du
> gerne vil have roteret omkring et punkt (xc,yc) med en vinkel v.
> De roterede punkter (xn[i],yn[i]) beregnes med:
>
> xn[i] := (x[i]-xc)*cos(v/360 * 2*pi) - (y[i]-yc)*sin(v/360 * 2*pi) +
xc;
> yn[i] := (y[i]-yc)*cos(v/360 * 2*pi) + (x[i]-xc)*sin(v/360 * 2*pi) +
yc;
>
> Jeg går ud fra at koordinaterne (x[i], y[i], xn[i], yn[i], xc, yc) er
erklærede
> som floating-point (f.eks. double eller extended).
> For at det ovenstående virker, skal du inkludere "math" i uses-listen.
ER ERKLÆRET
>
> Asger.
>

På forhånden mange tak.
MVH
Monie Jacobsen




Juno (23-07-2002)
Kommentar
Fra : Juno


Dato : 23-07-02 08:52

"Monie Jacobsen" skrev...
> Tak Asger
>
> Vil du være behjælpelig med, at tilrette nedstående procedure.
> Har prøvet, men uden held!
>
> Jeg har lagt en tegningen her, så du kan se vingeprofilet.
> news:3d3901b6$0$12676$edfadb0f@dspool01.news.tele.dk

Nå, så det har du ?

Kig i den nye tråd du har startet (rotering af image ?).

--
*/*
jUno
spamfilter: Fjern din bh



Monie Jacobsen (23-07-2002)
Kommentar
Fra : Monie Jacobsen


Dato : 23-07-02 11:53

Hej Juno
Håber det er ok? med at referer til din tegning.
Det var en mere dirkte og god måde en midt!
Du skal havde mange tak for din hjælp.
Du kan vel ikke omskrive, Asger forslag, så jeg kan afprøve dette?

MVH
Monie


"Juno" <bauer.juno@dinbhget2net.dk> skrev i en meddelelse
news:3d3d0ac7$0$16824$edfadb0f@dspool01.news.tele.dk...
> "Monie Jacobsen" skrev...
> > Tak Asger
> >
> > Vil du være behjælpelig med, at tilrette nedstående procedure.
> > Har prøvet, men uden held!
> >
> > Jeg har lagt en tegningen her, så du kan se vingeprofilet.
> > news:3d3901b6$0$12676$edfadb0f@dspool01.news.tele.dk
>
> Nå, så det har du ?
>
> Kig i den nye tråd du har startet (rotering af image ?).
>
> --
> */*
> jUno
> spamfilter: Fjern din bh
>
>



Juno (23-07-2002)
Kommentar
Fra : Juno


Dato : 23-07-02 12:02

"Monie Jacobsen"skrev
> Hej Juno
> Håber det er ok? med at referer til din tegning.
Jada, jeg ku' bare ikke la' vær' :)

> Det var en mere dirkte og god måde en midt!
Hvis du skal bruge det en anden gang, så vent til det du har postet i
dk.binaer kommer frem, og så tryk "svar til gruppe", så står der "monie
skrev i meddelelse 123123sdfgsdg44@tele.dk eller sådan noget, det
copy/paster du så ind i dit indlæg til tekst-gruppen.

> Du skal havde mange tak for din hjælp.
Selv tak.

> Du kan vel ikke omskrive, Asger forslag, så jeg kan afprøve dette?
Har jeg gjort
Det er det der ligger i den nye tråd, jeg skrev at du skulle kigge på !
news:3d3d0263$0$16781$edfadb0f@dspool01.news.tele.dk

--
*/*
jUno
spamfilter: Fjern din bh



Monie Jacobsen (23-07-2002)
Kommentar
Fra : Monie Jacobsen


Dato : 23-07-02 12:49

Hej Juno
Efter jeg havde sendt dette afsted blev new-gruppen opdateret!
Det var ellers et fint stykke arbejde du har gjort. Og jeg lærer rigtig
meget ved dette!
Har afprøvet forslaget og den roter fint, men selve vingeprofilet ser ikke
pænt ud mere!
Så hvis du en dag for en ide, så sig bare til.
Men lige en bemærkning. Du skriver din fulde adresse og sender den til mig.
så vil jeg nemlige sende en flaske rød/vidvin.
Som en stor tak for din hjælp!

MVH
Monie

"Juno" <bauer.juno@dinbhget2net.dk> skrev i en meddelelse
news:3d3d375f$0$16805$edfadb0f@dspool01.news.tele.dk...
> "Monie Jacobsen"skrev
> > Hej Juno
> > Håber det er ok? med at referer til din tegning.
> Jada, jeg ku' bare ikke la' vær' :)
>
> > Det var en mere dirkte og god måde en midt!
> Hvis du skal bruge det en anden gang, så vent til det du har postet i
> dk.binaer kommer frem, og så tryk "svar til gruppe", så står der "monie
> skrev i meddelelse 123123sdfgsdg44@tele.dk eller sådan noget, det
> copy/paster du så ind i dit indlæg til tekst-gruppen.
>
> > Du skal havde mange tak for din hjælp.
> Selv tak.
>
> > Du kan vel ikke omskrive, Asger forslag, så jeg kan afprøve dette?
> Har jeg gjort
> Det er det der ligger i den nye tråd, jeg skrev at du skulle kigge på !
> news:3d3d0263$0$16781$edfadb0f@dspool01.news.tele.dk
>
> --
> */*
> jUno
> spamfilter: Fjern din bh
>
>



Juno (23-07-2002)
Kommentar
Fra : Juno


Dato : 23-07-02 13:07

"Monie Jacobsen" <monie@tdcadsl.dk> skrev i en meddelelse
news:3d3d429d$0$11821$edfadb0f@dspool01.news.tele.dk...
> Hej Juno
> Efter jeg havde sendt dette afsted blev new-gruppen opdateret!
> Det var ellers et fint stykke arbejde du har gjort. Og jeg lærer
rigtig
> meget ved dette!
Jamen det er vel også meningen :)

> Har afprøvet forslaget og den roter fint, men selve vingeprofilet ser
ikke
> pænt ud mere!
Næh, den ser kun normal ud med 90 graders mellemrum ?
Du kan jo prøve at spørge efter en formel i
news:dk.edb.programmering
eller
news:dk.videnskab
Husk at være så kort og præcis i din formulering af spørgsmål som muligt
:)

> Så hvis du en dag for en ide, så sig bare til.
> Men lige en bemærkning. Du skriver din fulde adresse og sender den til
mig.
> så vil jeg nemlige sende en flaske rød/vidvin.
> Som en stor tak for din hjælp!
Næh, det er ikke nødvendigt. Så skal Klaus, Claus og Asger vel også have
(der er vist flere der er kommet med ting...) ? :)
Ideen med usenet er at vi frivilligt hjælper hinanden så godt vi kan.
Det kan jo være at jeg, eller andre, har et spørgsmål en dag, som du kan
hjælpe med, så kan du "give tilbage til gruppen" på den måde.

Selv tak
--
*/*
jUno
spamfilter: Fjern din bh



Monie Jacobsen (20-07-2002)
Kommentar
Fra : Monie Jacobsen


Dato : 20-07-02 07:28

Til Klaus og Juno
Har fundet fejlen!
Manglede at nulstille Yop[0] Yned[0]

X[0] := 0.00; Yop[1 ] := 0.00; Yned[1] := 0.00;
X[1] := 1.25; Yop[1] := 3.07; Yned[1] := -1.79;

Nu firker det fin!

MVH
Monie




Monie Jacobsen (21-07-2002)
Kommentar
Fra : Monie Jacobsen


Dato : 21-07-02 07:20

Hej

Den omtale vingeprofil fungerer fint.
Har du en ide til hvordan Image kan udprint'tes og med forskellige difeneret
(zoom) scaleringsfaktorer med SpinEdit?

MVH
Monie
E-mail: monie@tdcadsl.dk





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

Månedens bedste
Årets bedste
Sidste års bedste