Autor Beitrag
Kontrollmaster
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Di 20.04.04 15:30 
Folgendes Problem stellt sich mir:

user defined image

Ich soll zwischen den Punkten Xm1/Ym1 und Xm2/Ym2 die Strecke ausmessen. Vorher muss Delphi aber noch feststellen wo die beiden Punkte liegen. Nachdem die Strecke der beiden Punkte berechnet wurde, soll er die Hälfte der Strecke berechnen und diese als radius für einen kreis benutzen. Und dnach diesen Kreis zeichnen. Im Späteren Ablauf soll über einen SpinEdit ausgewählt werden wie viele Kreise gezeichnet werden sollen.

Hier der folgende Code in dem, das ausgeführet werden soll:

ausblenden volle Höhe 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:
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:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    PaintBox1: TPaintBox;
    procedure Button1Click(Sender: TObject);
    procedure Paintbox1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  

  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
    Xm, Ym, Xp, Yp : integer;
  implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
close;
end;

procedure TForm1.Paintbox1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
 var
  r, i: integer;
  Xk, Yk: integer;
  alpha, Kreisp: integer;
begin
If  shift = [ssleft] then
begin
Xm := X;
Ym := y;
end;
begin
If shift = [ssright] then
begin
Xp := X;
Yp := Y;
begin
  r := (xm-xp)*(xm-xp) + (ym-yp)*(ym-yp);
  r := Round(Sqrt(r));

  Kreisp :=360;
  for i := 0 to Kreisp do
  begin
    alpha := i * Round(360/Kreisp);
    Xk := xm+Round(r*cos((alpha-45)*pi/180));
    Yk := ym+Round(r*sin((alpha-45)*Pi/180));
    if i = 0 then
      Form1.Paintbox1.Canvas.MoveTo(Xk,Yk)
    else
      Form1.Paintbox1.Canvas.LineTo(Xk,Yk);

  end;
end;
end;
end;
end;

end.


Vielen Dank schonmal für eure Hilfe.
Blackbird
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 54



BeitragVerfasst: Di 20.04.04 18:01 
Erm...vielleicht geht das ja nur mir so, aber ich glaub', es ist günstig dich ein bischen verständlicher auszudrücken - ich hab' jedenfalls net verstanden worums genau geht.
Sag doch einfach nochmal genau, was du am Anfang gegeben hast, was damit berechnet werden soll und was du am Ende erhalten willst bzw. was du damit überhaupt machen willst. 8)
Kontrollmaster Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Di 20.04.04 19:31 
1. es sollen so viel Kreise wie möglich an den Kreis gezeichnet werden
2. Kreise sollen allle gleich groß sein
3. bevor die kreise gezeichnet werden sollen, soll die Strecke zw. jeweils zwei Punkten (zb. Xm1/Ym1 und Xm2/Ym2) errechnet werden (Punkte sind nicht gegeben)
4. die hälfte der Strecke ergibt den Radius des jeweiligen Kreises
5. Kreise sollen dann gezeichnet werden.

Vielleicht hilft das euch ja mich zu verstehen.

Gruß