Einzelnen Beitrag anzeigen

TU-student

Registriert seit: 7. Jun 2006
4 Beiträge
 
#1

[Help!]Simulation eines Doppelschiebers

  Alt 7. Jun 2006, 16:25
Hallo, auf der suche im Web um etwas Hilfe für meinen Info-Beleg zu bekommen bin ich auf euer schönes Forum gestoßen.
Ich hatte noch nie was mit Programmieren zu tun und wurde dieses Semester in info quasi ins kalte Wasser geworfen.
Ich hab ne Aufgabe bekommen die ich mit Delphi(7) im Selbststudium zu Hause lösen soll.
Naja, soweit so gut.
Ich hab die Aufgabenstellung mal angehangen. Und soweit bin ich bis jetzt:

Delphi-Quellcode:
unit info2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    PaintBox1: TPaintBox;
    laenge: TEdit;
    abstand: TEdit;
    Reset: TButton;
    procedure PaintBox1Click(Sender: TObject);
    procedure laengeChange(Sender: TObject);
    procedure abstandChange(Sender: TObject);
    procedure ResetClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;


  laenge1:integer;
  abstand1:integer;

  PunktA : array[0..600] of record
  x,y:integer ;
  end;
  PunktB : array[0..600] of record
  x,y:integer ;
  end;
  Pixel : array[0..600] of record
  x,y:integer;
  end;
implementation

{$R *.dfm}

procedure TForm1.laengeChange(Sender: TObject);

begin
  laenge1:=strtoint(laenge.Text);
end;

procedure TForm1.abstandChange(Sender: TObject);
begin
  abstand1:=strtoint(abstand.Text);
end;

procedure TForm1.PaintBox1Click(Sender: TObject);
var
  laufvar:integer;


begin
  with paintbox1.Canvas do begin

    pen.color:=(clblack);
    moveto(20,580);
    lineto(20,20);
    moveto(20,580);
    lineto(580,580);

    textout(580,585,'x');
    textout(10,10,'y');
    laufvar:=0;
    PunktA[0].x:=20; //fester Wert
    PunktA[0].y:=580-laenge1;
    PunktB[0].x:=20;
    PunktB[0].y:=580; //ferster Wert
    Pixel[0].x:=20;
    Pixel[0].y:=580-laenge1+abstand1;
    repeat
        inc(laufvar,1);
        PunktA[laufvar].y:=PunktA[laufvar-1].y+1;
        PunktA[laufvar].x:=20;
        PunktB[laufvar].x:=20+round(sqrt(sqr(laenge1)-(sqr(580-PunktA[laufvar].y))));
        PunktB[laufvar].y:=580;



        Pixel[laufvar].x:=PunktA[laufvar].x+round((abstand1/laenge1)*(PunktB[laufvar].x-PunktA[laufvar].x));
        Pixel[laufvar].y:=PunktA[laufvar].y+round((abstand1/laenge1)*(PunktB[laufvar].y-PunktA[laufvar].y));

        Pixels[Pixel[laufvar].x,Pixel[laufvar].y]:=clblack;
        
       moveto(Pixel[laufvar].x,Pixel[laufvar].y);
       lineto(Pixel[laufvar-1].x,Pixel[laufvar-1].y);

    until PunktA[laufvar].y>579;



end;
end;




procedure TForm1.ResetClick(Sender: TObject);
var laufvar:integer;
begin

    with paintbox1.Canvas do begin

     pen.color:=(clbtnface);
    laufvar:=0;
    PunktA[0].x:=20; //fester Wert
    PunktA[0].y:=580-laenge1;
    PunktB[0].x:=20;
    PunktB[0].y:=580; //ferster Wert

    repeat
        inc(laufvar,1);
        PunktA[laufvar].y:=PunktA[laufvar-1].y+1;
        PunktA[laufvar].x:=20;
        PunktB[laufvar].x:=20+round(sqrt(sqr(laenge1)-(sqr(580-PunktA[laufvar].y))));
        PunktB[laufvar].y:=580;
        moveto(20,PunktA[laufvar].y);
        lineto(PunktB[laufvar].x,580);
    until PunktA[laufvar].y=580;
     pen.color:=(clblack);
    moveto(20,580);
    lineto(20,20);
    moveto(20,580);
    lineto(580,580);

    textout(580,585,'x');
    textout(10,10,'y');
  end;
 end;
end.
also die zu berechnende Bahngleichung des Punktes wird bei mir ausgegeben, aber mehr auch nicht...
wie ich die Schieberstange Anzeige weis ich bereits, aber nicht wie ich es realiesieren kann das nicht alles
aufeinmal berechnet und dargestellt wird. Man sollte es ja schon mit dem menschl. Auge verfolgen können wie sich die Stange bewegt und der Punkt die Kurve zeichnet.
Ich hoffe ihr könnt mir dabei helfen.
Miniaturansicht angehängter Grafiken
untitled-1_133.jpg  
  Mit Zitat antworten Zitat