AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi [Help!]Simulation eines Doppelschiebers
Thema durchsuchen
Ansicht
Themen-Optionen

[Help!]Simulation eines Doppelschiebers

Offene Frage von "TU-student"
Ein Thema von TU-student · begonnen am 7. Jun 2006 · letzter Beitrag vom 10. Jun 2006
Antwort Antwort
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
TU-student

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

Re: [Help!]Simulation eines Doppelschiebers

  Alt 9. Jun 2006, 16:19
hm, 40 views und keiner konnte helfen


ich weis nun das ich die Timerfunktion benutzen muss, aber ich bekomms nicht hin

könnt ihr mir garnicht helfen? donnerstag ist Abgabetermin
  Mit Zitat antworten Zitat
mr.winkle

Registriert seit: 25. Mai 2006
98 Beiträge
 
Delphi 7 Personal
 
#3

Re: [Help!]Simulation eines Doppelschiebers

  Alt 9. Jun 2006, 16:59
Brauchst du das ding noch? dann würd ich mich mal dransetzen
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: [Help!]Simulation eines Doppelschiebers

  Alt 9. Jun 2006, 19:18
Herzlich willkommen in der Delphi-PRAXiS, TU-Student.

Als Maschinenbau-Student solltest du etwas mehr Ordnung in dein Vorgehen bringen. Erst der Entwurf, dann die Realisierung.

Welche Controls brauchst du für Benutzereingaben? Vorgegeben sind Edit-Komponenten für die Länge L der Verbindungsstange und den Abstand r zwischen A und P. Den Reset-Button nicht vergessen.

Wie soll die Ausgabe erfolgen? Du hast dich für eine PaintBox entschieden.

Wie könnte die geforderte robuste Eingabe aussehen? Wie sind die Wertebereich für die beiden Eingabegrößen L und r definiert? Darf der Benutzer die Größe der PaintBox zur Laufzeit verändern?

Dann wirst du die Funktion implementieren, welche dir die Koordinaten x und y zu gegebenem Winkel alpha liefert. Dass der Punkt P auf einer elliptischen Bahn mit den Radien r und (L - r) um den Ursprung deines Koordinatensystems läuft weißt du sicher.

Für die Ausgabe kannst du mit einem Timer arbeiten - musst es aber nicht. Die Zeitverzögerung kann genauso gut auch durch ein Delay() in einer Schleife eingebracht werden.

Nicht einfach irgendwo in der Mitte anfangen. Alles in überschaubare Teilaufgaben zerlegen. Divide et Impera!

Grüße vom marabu
  Mit Zitat antworten Zitat
TU-student

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

Re: [Help!]Simulation eines Doppelschiebers

  Alt 9. Jun 2006, 20:05
wie, wo, was? erstmal danke das überhauptjemand geantwortet hat

@marabu
jo, du hast genau ins schwarze getroffen, bin maschbauer

aber du schreibst viel um den heißen Brei, die Aufgabenstellung kann ich auch selber lesen...
ist aber nicht böse gemeint. Ob ich nun die Paintbox explizit nach der Eingabe des Benutzers anpasse oder sie beschränke und eine Fehlermeldung bei zur großen Werten ausgebe ist ja erstmal egal.
Weiterhin ist mein Programm ja auch schon in der Lage die Bahnkurve für die inidviduellen Eingabewerte darzusellen.

Mein Problem ist es den Schieber langsam (also so, dass man es verfolgen kann) zu bewegen und gleichzeitgig die Kurve zu Zeichnen...

@mr.winkle
ich würd mich sehr freuen wenn du dich etwas mit dem Problem beschäftigen würdest
wie gesagt, die Abgabe des Programms ist am Donnerstag (15.6.), also eig. noch genug Zeit
Danke, schonmal
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.754 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: [Help!]Simulation eines Doppelschiebers

  Alt 9. Jun 2006, 21:00
Du kannst mal die Funktion delay von Hagen so einfügen (wie marabu bereits vorgeschlagen hat):
Delphi-Quellcode:
implementation

{$R *.dfm}

procedure Delay(Milliseconds: Integer);
var
  Tick: DWord;
  Event: THandle;
begin
  Event := CreateEvent(nil, False, False, nil);
  try
    Tick := GetTickCount + DWord(Milliseconds);
    while (Milliseconds > 0) and
          (MsgWaitForMultipleObjects(1, Event, False, Milliseconds, QS_ALLINPUT) <> WAIT_TIMEOUT) do
    begin
      Application.ProcessMessages;
      if Application.Terminated then Exit;
      Milliseconds := Tick - GetTickcount;
    end;
  finally
    CloseHandle(Event);
  end;
end;
und delay hier aufrufen:
Delphi-Quellcode:
     
       moveto(Pixel[laufvar].x,Pixel[laufvar].y);
       lineto(Pixel[laufvar-1].x,Pixel[laufvar-1].y);
       delay(50);
    until PunktA[laufvar].y>579;
Dann wird Deine Kurve in jedem Schleifendurchlauf um 50 ms verzögert.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#7

Re: [Help!]Simulation eines Doppelschiebers

  Alt 9. Jun 2006, 21:03
Zitat von TU-student:
aber du schreibst viel um den heißen Brei
Noch etwas konkreter und ich hätte deine Heimaufgabe gelöst.

Zitat von TU-student:
die Aufgabenstellung kann ich auch selber lesen... ist aber nicht böse gemeint.
Kein Zweifel. Und wenn du glaubst, dass deine Heimarbeit schon fast fertig ist, dann hänge einfach noch eine Aufruf von Delay() in deine REPEAT-Schleife (hallo Klaus) und vielleicht ein SpinEdit zum Einstellen der Verzögerung. Ich weiß ja nicht welche Qualitätsansprüche dein Prof an den Code hat.

marabu
  Mit Zitat antworten Zitat
TU-student

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

Re: [Help!]Simulation eines Doppelschiebers

  Alt 9. Jun 2006, 21:24
ok, danke für deine Hilfe, Klaus

mehr wollte ich ja garnicht wissen
habs jetzt soweit fertig


Zitat:
Noch etwas konkreter und ich hätte deine Heimaufgabe gelöst.
da hätte ich auch nix dagegen gehabt, die Prüfung am Ende des Semesters muss ich eh nicht bestehen




ihr seit klasse, genau das hab ich gesucht, schönes we noch zusammes
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.754 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: [Help!]Simulation eines Doppelschiebers

  Alt 10. Jun 2006, 06:52
ohne Deine Euphorie jetzt bremsen zu wollen

Zitat:
habs jetzt soweit fertig
- hast Du in Deine Editfelder schonmal Werte eingegeben die ungleich einer Zahl sind?
- hast Du für die Länge schonmal eine 0 eingegeben?
- wenn Dein Programm läuft, hast Du schonmal ein anderes Programm darübergelegt, und
war deine Grafik danach noch zu sehen?
- was passiert wenn Du den reset Buton drückst während der Ausgabe Deiner Grafik?

Nur mal so als Anregung.

Grüße und ein schönes Wochenende
Klaus
Klaus
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:36 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz