AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Halbkreis zwischen zwei Punkten
Thema durchsuchen
Ansicht
Themen-Optionen

Halbkreis zwischen zwei Punkten

Ein Thema von Taugenichts · begonnen am 31. Mai 2006 · letzter Beitrag vom 2. Jun 2006
Antwort Antwort
Seite 1 von 2  1 2      
Taugenichts

Registriert seit: 23. Mai 2006
6 Beiträge
 
#1

Halbkreis zwischen zwei Punkten

  Alt 31. Mai 2006, 15:53
Hi,

wie kann ich einen Halbkreis zwischen zwei Punkten zeichnen lassen?

Also ich habe die Koordinaten x,y und x2,y2. Eine direkte Verbindung könnte ich mit
Delphi-Quellcode:
canvas.moveto(x,y);
canvas.LineTo(x2,y2);
zeichnen.

Ich möchte aber eine parabel- bzw. ellipsenähnliche Form haben. Wie ist das möglich, wenn ich nur diese zwei Koordinaten habe?

Vielen Dank für eure Hilfe & viele Grüße
Taugenichts
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#2

Re: Halbkreis zwischen zwei Punkten

  Alt 31. Mai 2006, 16:01
Welche Form willst du denn genau haben? Einen Halbkreis oder eine Parabel kannst du dir mit Delphi-Referenz durchsuchenDrawPie basteln, eine Bezierkurve sieht auch ganz schon aus Delphi-Referenz durchsuchenDrawbezier.
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Klaus01

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

Re: Halbkreis zwischen zwei Punkten

  Alt 31. Mai 2006, 16:03
Hallo Taugenichts,

kannst Dir mal die folgender Funktion anschauen:

Zitat:
Draws a pie-shaped the section of the ellipse bounded by the rectangle (X1, Y1) and (X2, Y2) on the canvas.

procedure Pie(X1, Y1, X2, Y2, X3, Y3, X4, Y4: Integer);

Description

Use Pie to draw a pie-shaped wedge on the image. The wedge is defined by the ellipse bounded by the rectangle determined by the points (X1, Y1) and X2, Y2). The section drawn is determined by two lines radiating from the center of the ellipse through the points (X3, Y3) and (X4, Y4).

The wedge is outlined using Pen, and filled using Brush.

Note: On Windows 95, the sums X1 + X2 and Y1 + Y2 cannot exceed 32768. Also, the sum X1 + X2 + Y1 + Y2 cannot exceed 32768.
Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Taugenichts

Registriert seit: 23. Mai 2006
6 Beiträge
 
#4

Re: Halbkreis zwischen zwei Punkten

  Alt 31. Mai 2006, 18:49
Hallo,

danke für eure Antworten.

Könnt ihr bitte ein Beispiel machen?

Die Funktion canvas.pie hatte ich mir bereits angesehen. Mir ist jedoch unklar, wie ich mit meinen zwei Koordinaten da umgehen soll, da ich dafür vier brauche?!

Außerdem, wo finde ich denn die Onlinehilfe zu DrawPie und Drawbezier?

Ich habe Delphi 6, das Projekt soll aber auch unter Delphi 5 laufen....

Vielen Dank.

P.S.: Ich habe gerade gesehen, mit canvas.arc kann ich auch einen Bogen zeichnen - ähnlich wie canvas.ellipse - bloß was muss ich für die vier Koordinaten angeben?

P.S.S.: Ich habe mal eben noch eine Grafik angehängt, mit der es vllt. ein wenig verständlicher wird, was ich will. Die orangene Linie soll dann der "Halbkreis" (Bezier?) sein.
Miniaturansicht angehängter Grafiken
delphi_halbkreis_zw_zwei_punkten_161.jpg  
  Mit Zitat antworten Zitat
Klaus01

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

Re: Halbkreis zwischen zwei Punkten

  Alt 31. Mai 2006, 22:01
für canvas.pie kannst Du doch auf deine 2 Punkte jeweils eine Senkrechte oder Waagerrechte bilden
die Senkrechte/Waagerechte hat die gleiche Länge wie der Abstand von Punkt 1 zu Punkt 2.

Canvas.pie sollte dann einen Halbkreis malen.
canvas.arc sollte das ähnlich machen

Variierst Du die Länge der Senkrechten/Waagerechten dann wird der Halbkreis zur HalbEllipse
oder ähnliches.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Taugenichts

Registriert seit: 23. Mai 2006
6 Beiträge
 
#6

Re: Halbkreis zwischen zwei Punkten

  Alt 1. Jun 2006, 17:38
Sorry, kannst du mir das bitte den Code dazu posten? Ich bekomme es nicht gebacken...

den Abstand zwischen diesen zwei Punkten kann ich mit
Delphi-Quellcode:
var
     abstand: LongInt;
     Radiant: Extended;
     x2,x,y2,y: integer;
begin
     Radiant:= (x2-x) * (x2-x) + (y2-y) * (y2-y);
     abstand:= trunc(sqrt(Radiant));
berechnen.

Und dann? Wie lautet die Syntax von canvas.pie? Ich meine klar, ich sehe, dass ich x1,y1 usw. eintragen muss, aber was ist die _logische_ Syntax? Welcher Punkt bezeichnet was? Wo wird da zwischen was etwas gezeichnet? Ich verstehe die Funktion nicht ganz...

Sorry, dass ich mich so dämlich anstelle.
  Mit Zitat antworten Zitat
Klaus01

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

Re: Halbkreis zwischen zwei Punkten

  Alt 1. Jun 2006, 23:10
Nun, da habe ich Dich traurigerweise erstmal in die falsche Wege geleitet.
Es tut mir leid.

Ich habe auch noch ein paar Probleme.
Aber mit Punkten die auf der gleiche X-Achse liegen
geht es mit dem folgenden Code:
Delphi-Quellcode:
procedure circle(canvas:TCanvas;p1,p2:TPoint);
var
  radius: Integer;
  i,x,y: Integer;
  m:real;
begin
  if p1.x = p2.x then
    radius := (p2.y - p1.y) DIV 2
  else
    if p1.y = p2.y then
      radius := (p2.x -p1.x) DIV 2
    else
      radius := round(sqrt ( sqr(p2.x - p1.x) + sqr(p2.y-p1.y))) DIV 2;

  m := (p2.Y - p1.Y)/(p2.x -p1.X);

  canvas.Pen.Color:=clRed;
  canvas.penPos:=p1;
  canvas.LineTo(p2.x,p2.y);
  canvas.PenPos:=p2;

  canvas.Pen.color:=clBlack;
  for i:=0 to 180 do
    begin
      x:=p2.x+round(radius*cos(i*pi/180))-radius;
      y:=p2.y+round(radius*sin(i*pi/180));
      sleep(10);
      canvas.LineTo(x,y);
    end;

end;

procedure TForm1.Button1Click(Sender: TObject);
var
 p1,p2:TPoint;
begin
  p1.X:=450;
  p1.y:=150;
  p2.X:=300;
  p2.Y:=150;
  circle(Form1.Canvas,p1,p2);
end;

end.
Mehr fällt mir dazu heute auch nicht ein.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Klaus01

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

Re: Halbkreis zwischen zwei Punkten

  Alt 2. Jun 2006, 09:40
Hallo Taugenichts,

eine verbesserte Version:
Ich hoffe Du steigst da ein wenig durch.

Grüße
Klaus

[edit] für RadToDeg muß die Math Unit eingebunden werden [/edit]
Delphi-Quellcode:
procedure circle(canvas:TCanvas;color,bgColor:TColor;p1,p2:TPoint;deg:Integer);
// canvas -> Zeichenfläche
// color -> Kreisfarbe
// bgColor -> Hintergrundfarbe
// p1 -> Startpunkt
// p2 -> zweiter Schnittpunkt
// deg -> Kreisdrehung 0..360

var
  radius: Integer;

  x,y: Integer;

  pz:Tpoint;

  i,j : real;
  m:real;

  rect: TRect;

begin

  canvas.brush.Color:=bgColor;
  canvas.FillRect(canvas.ClipRect); // Fülle Canvas mit bgColor

  m := (p2.Y - p1.Y)/(p2.x -p1.X); // Die Steigung der Geraden

  // der Punkt pz befindet sich auf der Geradenmitte

  if p1.x = p2.x then // wenn die Gerade eine Sekrechte ist
    begin
      radius := (p2.y - p1.y) DIV 2;
      pz.y := p1.Y + radius;
      pz.x := p1.X;
      j:= -90;
      i:=-90;
    end
  else // wenn die Gerade eine Waagerechte ist
    if p1.y = p2.y then
      begin
         radius := (p2.x -p1.x) DIV 2;
         pz.Y := p1.Y;
         pz.X := p1.x + radius;
         j := 0;
         i:=0;
      end
    else // die Gerade ist eine Schräge
      begin
        radius := round(sqrt ( sqr(p2.x - p1.x) + sqr(p2.y-p1.y))) DIV 2;
        pz.X := p1.X + (p2.X - p1.X) DIV 2;
        pz.y := p1.y + (p2.y - p1.y) DIV 2;
        //ShowMessage(floatToStr(m));
        j := radToDeg(arctan(m)); // arctan der Steigung = Winkel
        i:=j;

      end;

  canvas.Pen.Color:=color;

  if p1.X < p2.X then
     canvas.PenPos:=p2
  else
     canvas.PenPos:=p1;

  
  // male einen Halbkreis
  while i < j + deg do
    begin
      x:=pz.x+round(radius*cos((i*pi/180)));
      y:=pz.y+round(radius*sin((i*pi/180)));
      canvas.LineTo(x,y);
      i:=i+1;
    end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
p1,p2:TPoint;
begin
  p1.X:=300;
  p1.y:=250;
  p2.X:=125;
  p2.Y:=150;
  circle(Form1.Canvas,clRed,clBlack,p1,p2,180);
end;
Klaus
  Mit Zitat antworten Zitat
fLaSh11
(Gast)

n/a Beiträge
 
#9

Re: Halbkreis zwischen zwei Punkten

  Alt 2. Jun 2006, 09:50
ich habs mal getestet und bei mit funzt 'RadToDeg' nicht. Sowohl bei D3 als auch D2k5PE.
  Mit Zitat antworten Zitat
Klaus01

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

Re: Halbkreis zwischen zwei Punkten

  Alt 2. Jun 2006, 09:53
Die Math Unit muß für RadToDeg eingebunden werden

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 21:30 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