Autor Beitrag
RomanMaschbau
Hält's aus hier
Beiträge: 8

Win ME, Win2000
D6
BeitragVerfasst: So 02.05.04 12:51 
Hallo,

ich habe ein Problem, bei dem mir vielleicht jemand weiterhelfen kann: Ich will eine Wurfparabel (hrizontal) in eine Paintbox ausgeben lassen!!
Die Startwerte sollen variabel einzugenben sein (Physikalisch habe ich das Problem im Griff), dann soll die Kurve aber in der Paintbox mit Koordinatensystem ausgegeben werden.

Ich habe also ein Paar fragen:

1. Kann man in so einem Pixel-xy-System zoomen, oder die achsen variabel gestalten? ( verschiedene WErtebereiche, z.B. 1 m Starthöhe und 1 m/s abwurfgeschwindigkeit oder das ganze mit 400m und 30 m/s)


2. wei rechne ich die werte die rauskommen auf die pxieldarstellung um?


Es würde mir auf jeden Fall helfen, wenn jemand so etwas schon mal programmiert hat (ist ja im prinzip trivial, bin aber ein ziemlicher anfänger in delphi) und mir den quelltext zeigen könnte. Ansonsten wäre ich über jede Hilfe froh !!!

Roman :D

Moderiert von user profile iconPeter Lustig (13:55, 02.05.2004): Topic verschoben
Brainiac
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 02.05.04 19:32 
Zoomen kannst du direkt nicht, aber da du ja wahrscheinlich sowieso mit Gleitkommazahlen rechnest, brauchst du ja beim Unrechnen auf Pixel nur einen weiteren Vorfaktor einzubauen.

Umrechnen auf Pixel geht einfach mit round.
Berechne die Kurvengleichung für deinen Wurf (x->y) und zeichne dann den passenden Y-Pixel zu jedem X-Pixel mit einer For-Schleife.
catweasel
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 487
Erhaltene Danke: 1

Win 7 64bit
Delphi 7 Second Sedition V7.2
BeitragVerfasst: So 02.05.04 21:28 
Zitat:
Zoomen kannst du direkt nicht

Naja, aber mit Stretchblt irgendwie aber schon oder ?

Catweasel

_________________
Pommes werden schneller fertig wenn man sie vor dem Frittieren einige Minuten in siedendes Fett legt.
umpani
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 389



BeitragVerfasst: So 02.05.04 22:41 
mit stretchblt soomst du das ganze, jedoch sind dir Pixel dann nur größer, du hast aber nicht einen detailierten Ausschnitt der Parabel.

Die sache mit dem zeichnen geht ganz einfach. Du hast je eine Fomel in der Art

f(x) = ???

Beim zeichne fängst du mit x := 0 an bis zu x := gewünschter Wert.

Wenn der Ursprung also 0/0 ist, dann zunächst

ausblenden Delphi-Quelltext
1:
canvas.moveto(0,0)					


für jeden weiteren x-Wert dann

ausblenden Delphi-Quelltext
1:
canvas.lineto(x,y)					


Wenn du nur den Pixel setzt, kann es sein, daß du lücken in der Linie hast. Mit Lineo verhinderst du das.



Gruß Umpani

_________________
Lernen, ohne zu denken, ist eitel; denken, ohne zu lernen, ist gefährlich. Konfuzius
Simon Joker
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 236
Erhaltene Danke: 1



BeitragVerfasst: Mo 03.05.04 07:42 
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Mo 03.05.04 08:11 
RomanMaschbau Threadstarter
Hält's aus hier
Beiträge: 8

Win ME, Win2000
D6
BeitragVerfasst: Mo 03.05.04 20:25 
Besten Dank für die vielen antworten!

habe es bereits geschafft, die kurven zeichnen zu lassen und die dinger sind auch rund. das mit dem zoomen leuchtet mir jetzt auch ein. ich muss die meter einfach nur in andere anzahl von pixeln umrechnen, mein einzigstes probelm ist jetzt noch die beschriftung vom koordinatensystem!!

ich habe ein raster selbst reingebastelt und will nun die beschriftung vornehmen. das funktioniert ja so weit ich weiß über textout(x,y,' '); ! ich will jetzt aber an der x-achse zum beispiel 10 werte ausgeben. kann ich das irgendwie elegant lösen über eine laufvariable?? man kann ja nur einen string ausgeben, aber dann müsste ich ja 10 mal den befehl da hin schreiben und dass kann ja nicht die einziste lösung sein.
hat jemand eine idee???

ich bin euch sehr sehr dankbar, leute!!!

roman
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 481

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Mi 05.05.04 09:11 
da würde dann in etwa so etwas gehen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
var i:integer;
[...]
x:=10; // oder halt nen anderen Wert, wo die Beschriftung anfangen soll
for i:=0 to 9 do textout(x+20*i,y,inttostr(i));

Der Befehl inttostr(), wandelt einen integer-Wert in einen String um.

_________________
We are, we were and will not be.
RomanMaschbau Threadstarter
Hält's aus hier
Beiträge: 8

Win ME, Win2000
D6
BeitragVerfasst: Fr 07.05.04 15:24 
Danke,

Das habe ich jetzt auch soweit geschafft, nur ergibt sich da schon wieder ein neues problem!! an der y-achse geht das ja alles noch so abe an der x-achse verzieht es mein ganzes gitter.

ich habe doch ein eigenes raster eingebaut und wollte unten an den entpunkten halt meine beschriftung anbringen. wenn ich das mache, dann verzieht es das raster und um so größer die werte werden, also um so länger, um so schlimmer. ich habe auch schon versucht mit den koordinaten zu experimentieren, aber es bringt auch nichts, wenn ich die tiefer setzten, oder nach links verschiebe, das ganze raster geht mit.
ich besteh nicht warum. normalerweise hört das raster auch genau mit den achsen auf, aber sobald da die beschriftung dran kommt, zieht er die striche automatisch länger und wenn dann noch eine lange zahl wie 1000 da steht, verschiebt sich alles!

wie gesagt, ich habe es eigentlich schon probiert mit den koordinaten zu varrieren, aber irgendwie? vielleicht hast du da noch ne idee, oder mach ich einfach nur was falsch??

roman
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 481

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Fr 07.05.04 15:40 
hmm... so ohne Quelltext kann ich dazu leider gar nichts sagen. Ich bin auch nicht der Held mit Grafischer Ausgabe, deswegen kann ich da auch nicht sagen, ob du evtl da nen typischen Fehler gemacht hast....aber wenn du was Quellcode postest, kann ich mir das ja mal angucken.

_________________
We are, we were and will not be.
RomanMaschbau Threadstarter
Hält's aus hier
Beiträge: 8

Win ME, Win2000
D6
BeitragVerfasst: Sa 08.05.04 13:41 
hallo du

hier jetzt mal mein quelltext. ich habe die variablen wie folgt initialisiert:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
i:=70;
y:=80;
j:=1;
q:=22; 

 //Gitter
    while i<=520 do        // x-achse
      begin
        canvas.pen.Width:=1;
        canvas.pen.Color:=clgreen;
        canvas.moveto(i,520);     // --> für Gitter 
        canvas.TextOut(i,535,InttoStr(j));    //--> hier wirds dann schief durch beschriftung
        canvas.LineTo(i,60);   //Gitter ziechnen
        i:=i+40; 
        j:=j+2;
      end;
    while y<520 do           // y-achse
      begin
        canvas.pen.Width:=1;
        canvas.pen.Color:=clgreen;
        canvas.moveto(30,y);
        canvas.TextOut(15,y,IntToStr(q));
        canvas.LineTo(520,y);
        y:=y+40;
        q:=q-2;
      end;


also er zieht die gitterlinien im abstand von 40 pixel und soll da dann die beschriftung kommen, die jetzt erstmal in 2er schritten erfolgt. bei größeren einheiten wird die verzerrung immer schlimmer!!!

ich hofffe, du findest den fehler. ich habe schon andere variante probiert aber irgendwie wird das nicht besser!!!

Vielen dank für deine bemühungen!!

Roman

Moderiert von user profile iconPeter Lustig (15:06, 08.05.2004): Delphi-Tags hinzugefügt
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 481

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Sa 08.05.04 14:39 
Probier mal das (nur die Reihenfolge der Befehle geändert)
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
while i<=520 do        // x-achse
begin
  canvas.pen.Width:=1;
  canvas.pen.Color:=clgreen;
  //Zeichenposition setzen
  canvas.moveto(i,520);     // --> für Gitter
  // Linie nach...ziehen
  canvas.LineTo(i,60);   //Gitter ziechnen
  // dann Beschriftung
  canvas.TextOut(i,535,InttoStr(j));
  // (durch das Schreiben verändert sich die Stiftposition, daher wirds mit deiner Reihenfolge wohl schief..)
  i:=i+40;
  j:=j+2;
end;
while y<520 do           // y-achse
begin
    canvas.pen.Width:=1;
    canvas.pen.Color:=clgreen;
    canvas.moveto(30,y);
    canvas.LineTo(520,y);
    canvas.TextOut(15,y,IntToStr(q));
    y:=y+40;
    q:=q-2;
end;

_________________
We are, we were and will not be.
RomanMaschbau Threadstarter
Hält's aus hier
Beiträge: 8

Win ME, Win2000
D6
BeitragVerfasst: So 09.05.04 10:42 
THX!!!

wie geil ist das denn, ich such mir nen ast du dann liegt es nur an der reihenfolge. das war echt die Lösung!

vielen dank!!!!

damit sind vorrübergehend sogar mal alle meine probleme gelöst.
muss jetzt nur noch ne lösung finden, damit die kurven für große und kleine weiten sinnvoll im koordinatensystem erscheinen, aber da bräuchte ich doch nur ne bedingung einbauen, dass bei bestimmten weiten die beschriftung anders ist --> also faktor für pixelumrechnung einbauen.

naja, das schaff ich schon und wenn nicht, dann kann man ja zum glück auf euch/dich zählen!!!

roman