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



BeitragVerfasst: Mi 31.03.04 14:09 
Hi Leute,

wir sollen in Informatik einen Kreis zeichnen bzw. per mausklick mit der linkten Taste wird ein punkt markiert und mit der rechten maustaste noch einer. Die beiden Punkte ergeben den radius des Kreises. Daher muss der Kreis durch den Punkt der rechten maustaste gehen.

Der Kreis soll über das Bogenmaß gezeichnet werden. Da ich leider nich weiß wie man dieses machen soll wäre ich über eure Hilfe sehr dankbar.

Gruß

Kontrollmaster
Alebo
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Mi 31.03.04 17:38 
Schau mal in der Hilfe unter canvas nach.
Wenn du eine Tpaintbox benutz, kannst du das onclick Ereignis benutzen, darin werden auch die Positionen mit übergeben.
Ein bischen umrechnen und du hast den Kreis.
Kontrollmaster Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Mi 31.03.04 19:28 
wie mache ich das mit canvas? Bei der hilfe verstehe ich nich viel. Hab zwar schon etwas mit canvs gemacht, aber glaube ich kaum das dort etwas mit rectangel gemacht wird, oder?
Seniman
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 42


D6 Pers
BeitragVerfasst: Mi 31.03.04 21:13 
Hi

Kontrollmaster hat folgendes geschrieben:

Der Kreis soll über das Bogenmaß gezeichnet werden.


Was denn bitte damit gemeint? Bogenmaß ist ein Maß für Winkel und hilft soweit ich das sehe beim Zeichnen eines Kreises überhaupt nicht weiter.

Zur Canvas:
Es gibt folgendes Prozedur: Form.Canvas.Ellipse(x1,y1,x2,y2);
Die Zeichnet eine Ellipse in das Rechteck, dass durch x1,y1,x2 und y2 festgelegt wird. Wenn du den Mittelpunkt des gewünschten Kreises hast (x,y) und den Radius r, dann müsstest du
ausblenden Delphi-Quelltext
1:
Form1.Canvas.Ellipse(x-r,y-r,x+r,y+r);					

aufrufen, um den entsprechenden Kreis zu zeichnen.

Grüße
Seniman
Kontrollmaster Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Mi 31.03.04 21:18 
hm, kann nur das wiedergeben was mein lehrer meinte. Sorry das mit der Ellipse okay aber kann man dort auch, zwei punkte per maustaste markieren durch die dann bei einem punkt der kreis durchgeht und der andere punkt einen zweiten kreis?
rokdd
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 329

Win XP
D6
BeitragVerfasst: Mi 31.03.04 21:37 
hallo,
seniman hat doch schon beschrieben wie dsa geht. kann man mir nur vorstellen dass du den radius nicht errechnen kannst.

x1/x2....x/x2 von klick1/2
y1/2.....x/x2 von klick1/2

errechnest erst du die differenz:

a=y2-y1
b=x2-x1

r=Sqrt(Qzadratwurzel) aus der Summe von Quadrat von a und dem quadrat von b. dieser satz nennt sich auch satz des phytagoras

Rokdd
Kontrollmaster Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Do 01.04.04 15:32 
Hi Leute,

habe jetzt soweit versucht ohne diese Ellipse einen kreis zu zeichnen doch leider habe ich anscheinend mehrere Fehler drinne. Zum einen sollte unten bei Button2 zwei bedingungen erfüllen :

1. Wenn 1 gezählt, dann bewege dich
2. Wenn > 1 dann zeichne Linie

Kann mir jemand helfen?

Die Panels sind nur zur Probe da.

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:
75:
76:
77:
78:
79:
80:
81:
82:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    Panel3: TPanel;
    Panel4: TPanel;
    Button1: TButton;
    PaintBox1: TPaintBox;
    Button2: TButton;
    Panel5: TPanel;
    Panel6: TPanel;
    Panel7: TPanel;
    Panel8: TPanel;
    procedure Button1Click(Sender: TObject);
    procedure Paintbox1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  Xm, Ym, Xp, Yp, a, b, xk, yk, alpha, Xz, Yz : integer;
  implementation

{$R *.dfm}

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

procedure TForm1.Paintbox1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
If  shift = [ssleft] then
begin
Xm := X;
Ym := y;
Panel1.Caption := IntToStr (X);
Panel2.Caption := IntToStr (Y);
end;
begin
If shift = [ssright] then
begin
Xp := X;
Yp := Y;
Panel3.Caption := IntToStr (Xp);
Panel4.Caption := IntToStr (Yp);
end;
end;
end;


procedure TForm1.Button2Click(Sender: TObject);
var r: real;
begin
a:= Xm-Xp;
b:= Ym-Yp;
r:= sqrt(a*a + b*b);
Xk:= Round(r*cos(alpha*pi/180));
Yk:= Round(r*sin(alpha*Pi/180));
Panel7.Caption := IntTostr (Xk);
Panel8.Caption := IntTostr (Yk);
Xz := Xk +Xm;
Yz := Yk + Ym;
Panel5.Caption := IntToStr (Xz);
Panel6.Caption := IntToStr (Yz);
end;

end.


Moderiert von user profile iconMotzi: Code- durch Delphi-Tags ersetzt.
andy09071978
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33

Win XP, Win 2000
D7 Prof
BeitragVerfasst: Di 06.04.04 10:47 
probier mal das:

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:
procedure TForm1.Button4Click(Sender: TObject);
var
  r, i: integer;
  Xk, Yk: integer;
  alpha, Kreisp: integer;
begin
  r := (xm-xp)*(xm-xp) + (ym-yp)*(ym-yp);
  r := Round(Sqrt(r));

  Kreisp := 20;
  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.Canvas.MoveTo(Xk,Yk)
    else
      Form1.Canvas.LineTo(Xk,Yk);

  end;

  //Form1.Canvas.Ellipse(Xm-r,Ym-r,Xm+r,Ym+r);
end;


r=radius
Kreisp=zu berechnenden Kreispunkte (3-360)
i= counter
Xk,Yk: aktuelle Kreispunkte

oder unten der auscommentierte Code zur Canvas-Funktion