| Autor |
Beitrag |
Kontrollmaster
Hält's aus hier
Beiträge: 9
|
Verfasst: 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
|
Verfasst: 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 
Hält's aus hier
Beiträge: 9
|
Verfasst: 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
      
Beiträge: 42
D6 Pers
|
Verfasst: 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
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 
Hält's aus hier
Beiträge: 9
|
Verfasst: 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
      
Beiträge: 329
Win XP
D6
|
Verfasst: 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 
Hält's aus hier
Beiträge: 9
|
Verfasst: 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.
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 public 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 Motzi: Code- durch Delphi-Tags ersetzt.
|
|
andy09071978
      
Beiträge: 33
Win XP, Win 2000
D7 Prof
|
Verfasst: Di 06.04.04 10:47
probier mal das:
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;
end; |
r=radius
Kreisp=zu berechnenden Kreispunkte (3-360)
i= counter
Xk,Yk: aktuelle Kreispunkte
oder unten der auscommentierte Code zur Canvas-Funktion
|
|
|