Hallo Leute, ich verzweifele bald.
Ich arbeite in diesem Projekt zur Zeit in tmt-Pascal aber
kann man ja einfach auf Delphi übertragen.
Ich möchte einen Punkt über den schnellsten Weg zu einem Zielpunkt
kommen lassen, dass er sozusagen eine gerade Linie hinter sich her zieht.
Das kann jedes Malprogramm was ich hier verlange.
Mein Problem ist dass ich die Verteilung der Wege in x und y - Richtung nicht
verhältnismässig hin bekomme. Naja ich hier ist mein code.
Der Punkt legt immer 45 Grad bis er auf waagerechter bzw. senkrechter Bahn zum
Zielpunkt steht.
Das ist der komplette code aber eigentlich interessiert nur die Procedure p_xmove
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: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89:
| program gravity_particle; uses crt,dos,graph;
const x_max = 639; y_max = 479;
var grafiktreiber, grafikmode : Integer; Color : Byte; m, n, x_pos, y_pos : integer; x1,x2,xred,xmove : 0..639; y1,y2,yred,ymove : 0..479; zahl,hilf,radius : word; vector,xv,yv : real; zw_sum : real; schalter : boolean;
procedure p_xmove; begin xv:=xred-xmove; yv:=yred-ymove; if yv=0 then yv:=1; if xv=0 then xv:=1;
if yv>xv then vector:=xv/yv else vector:=yv/xv;
if zw_sum>1 then schalter:=true; if zw_sum<1 then schalter:=false; if zw_sum=1 then schalter:=true;
case schalter of true : begin if xmove>xred then xmove:=xmove-1 else xmove:=xmove+1; zw_sum:=zw_sum-abs(vector); end; false: begin if ymove>yred then ymove:=ymove-1 else ymove:=ymove+1; zw_sum:=zw_sum+abs(vector); end; end; end;
begin
grafiktreiber := detect; InitGraph(grafiktreiber, grafikmode, 'e:\turbo7.0\BP\BGI'); if GraphResult <> grOk then Halt(1); x1:=0; x2:=0; xred:=400; yred:=200; y1:=0; y2:=0; color:=0; zahl:=0; hilf:=5; radius:=300; setbkcolor(4);
zw_sum:=1.5;
for hilf:=0 to 1 do begin putpixel(xred,yred,4); putpixel(xred+hilf,yred+hilf,4); putpixel(xred,yred+hilf,4); putpixel(xred+hilf,yred,4); end; xmove:=50;ymove:=400;
repeat p_xmove; putpixel(xmove,ymove,14); delay(10); until (keypressed); readln; CloseGraph; end. |
Wäre sehr froh über brauchbare tips.
Mir fehlt da irgendwie ein mathematisches Konzept.
Moderiert von
AXMD: Code- durch Delphi-Tags ersetzt.