Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Geometrie (https://www.delphipraxis.net/35229-geometrie.html)

bender123 4. Dez 2004 08:54


Geometrie
 
Hallo!
Ich will aus Koordinaten für 3 Punkte ein Dreieck konstruieren und darum einen Kreis legen, der alle Eckpunkte berührt.
Für den Mittelpunkt des Kreises brauche ich den Schnittpunkt der Mittelsenkrechten zu den drei Seiten. Wie ermittel ich diesen für den allgemeinen Fall (beliebiges Dreieck)?

Luckie 4. Dez 2004 09:01

Re: Geometrie
 
Wenn mich nicht alles täuscht, dann gilt das sowieso nur für ein gleichseitiges Dreieck. Bei jedem anderen Dreieck schneiden sich die Mittelsenkrechten nicht in einem Punkt.

Nikolas 4. Dez 2004 09:05

Re: Geometrie
 
Stell doch für zwei Mittelsenkrechten Gleichungen auf und schneide die. Mit ein bischen Vektorrechnung wirst du das auch recht einfach implementieren können.

atreju2oo0 4. Dez 2004 09:42

Re: Geometrie
 
Mathematisch gesehen kannst Du mit drei Punkten eine Elipse beschreiben, nicht jedoch einen Kreis.
Bei einem Kreis müsste gelten dass jeder Punkt vom Mittelpunkt aus die gleiche Entfernung hat und das
trifft nur bei Sonderfällen zu. Wenn jedoch alle Möglichkeiten mit einbezogen werden sollen, dann wird
das Problem ganz schön komplex... aber noch nicht unmöglich!
Du musst eine Formel aufstellen, die in abhängigkeit vom radius prüft ob alle 3 Punkte im Kreis liegen.
Zusätzlich müsstest Du das Dreieck in dem Kreis noch bewegen...

Falls Du ne Lösung hinbekommst würde ich die gerne mal sehen...
Viel Erfolg

jfheins 4. Dez 2004 10:09

Re: Geometrie
 
in der freien Enzyklopädie Wikipedia steht folgendes:
Umkreis
aus Wikipedia, der freien Enzyklopädie
In der Geometrie ist ein Umkreis ein Kreis, der durch alle Eckpunkte eines Vielecks (Polygon) geht.

Nicht jedes Polygon hat einen Umkreis. So hat zwar jedes Dreieck einen Umkreis, ein allgemeines Viereck hat jedoch keinen mehr. Vierecke, die einen Umkreis besitzen, werden Sehnenvierecke genannt. Spezialfälle sind das gleichschenklige Trapez, das Rechteck und das Quadrat.

Der Umkreismittelpunkt eines Dreiecks ist der Schnittpunkt der Mittelsenkrechten der drei Seiten.

Hat ein konvexes Vieleck einen Umkreis, dann schneiden sich alle Mittelsenkrechten seiner Seiten in einem Punkt, dem Umkreismittelpunkt. Umgekehrt gilt: Wenn sich alle Mittelsenkrechten eines konvexen Vielecks in einem Punkt schneiden, dann hat das Vieleck einen Umkreis.

Weitet man die Definition des Umkreises auf den Raum aus, so erhält man eine Umkugel, auf der alle Eckpunkte eines Polyeders liegen.

Siehe auch: Inkreis, Kreise am Dreieck


Zitat:

Zitat von atreju2oo0
Mathematisch gesehen kannst Du mit drei Punkten eine Elipse beschreiben, nicht jedoch einen Kreis

Überleg doch mal.
Du kannst garantiert einen Kreis zeichnen, auf dem 2 bestimmte Punkte liegen. Den Duchmesser dieses Kreises muss dann zwischen der entfernung der beiden Punkte und (nahezu) Unendlich schwanken. Damit bekommst du den dritten Punkt in jedem Fall mit auf den Kreis, sofern die Punkte ein Dreick darstellen, und somit nicht auf einer Linie liegen.

Nikolas 4. Dez 2004 11:01

Re: Geometrie
 
Zitat:

Damit bekommst du den dritten Punkt in jedem Fall mit auf den Kreis, sofern die Punkte ein Dreick darstellen, und somit nicht auf einer Linie liegen.
Eine Gerade kannst du aber auch als einen entarteten Kreis mit unendlichem Durchmesser ansehen.

Jelly 4. Dez 2004 11:43

Re: Geometrie
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Luckie
Wenn mich nicht alles täuscht, dann gilt das sowieso nur für ein gleichseitiges Dreieck. Bei jedem anderen Dreieck schneiden sich die Mittelsenkrechten nicht in einem Punkt.

Das glaub ich aber nicht. Was du vielleicht meinst, ist daß der Mittelpunkt des Dreiecks auch der Mittelpunkt des Kreises ist. Da magst du Recht haben. Aber wenn dir 3 Punkte gegeben sind, solltest du immer einen Kreis finden, wo diese 3 Punkte drauf liegen... Ich hab mal im Anhang schnell ein belieges Dreieck gezeichnet und anschliessend einen Kreis drum gelegt.

Tylerxxx 16. Dez 2004 18:11

Re: Geometrie
 
ne ich glaub eher er meint, dass Das dreieck aussen liegt und der kreis im dreick, quasi ein dreieck welches einen kreis umschliesst! und die drei koordinaten sind die kordinaten von den drei eckpunkten des Dreiecks!

die aufgabe ist nun den kreis so ins dreieck zu setzen das er nicht die drei seiten des dreieck überschreitet( quasi nur tnagiert) !

habe fast dieselbe aufgabe bekommen und bin auch schon am grübeln!

mfg Tyler

track 14. Mai 2006 17:28

Re: Geometrie
 
hab 3 Punkte, muss jetzt feststellen, ob die einen Dreieck bilden oder eifach auf einer Gerade liegen
hab mir auch überlegt, ob es nicht mit hilfe von Vektorrechnung das problem bewältigt werden kann und zwar:

cos Alpha = A*B/(|A|*|B|)
A*B = a1*b1+a2*b2*+....+aN*bN
|A| = sqrt(sqr(a1)+sqr(a2)+...)
genauso mit |B| und wenn die cos Alpha = 0 dann ist es auf einer gerade.

Delphi-Quellcode:
function DrawDreieck(Figur:TFigur) : boolean;
var VektA_VektB : real; //A*B
    LaengeVA, //laenge des vektors A
    LaengeVB : real; //laenge des vektors A
    x1,x2, //die einzelnen laengen
    y1,y2 : longint;
    Ecke : real; //ergebnis
begin
  x1 := Figur.Dreieck_Daten[1].X - Figur.Dreieck_Daten[2].X;
  y1 := Figur.Dreieck_Daten[1].Y - Figur.Dreieck_Daten[2].Y;
  x2 := Figur.Dreieck_Daten[3].X - Figur.Dreieck_Daten[2].X;
  y2 := Figur.Dreieck_Daten[3].Y - Figur.Dreieck_Daten[2].Y;
  LaengeVA := sqrt(sqr(x1) + sqr(y1)); //     <--------
  LaengeVB := sqrt(sqr(x2) + sqr(y2));
  VektA_VektB := x1 * x2 + y1 *y2;
  Ecke := arccos(VektA_VektB / (LaengeVA * LaengeVB));
  if Ecke <> 0 then DrawDreieck := true;
end;

Problem ist in der Zeile mit Pfeil. gibt n Fehler "integerüberlauf" aus
was kann man da tun?

als zugabe - Typen definitionen:
Delphi-Quellcode:
type

  TRechteck = record
                P1 ,     // Eckpunkte des Rechtecks
                P2 : TPoint;
              end;
             
  TKreis = record
             Aussenpunkt : TPoint;  // Eckpunkt des "Quadrats" in das
             Durchmesser : integer; // der Kreis gezeichnet wird
           end;                     // die Kantenlänge dieses Quadrates

  TDreieck = array[1..3] of TPoint;    // Drei Eckpunkte des Dreiecks

  TFigurentyp = (Rechteck,Kreis,Dreieck);
  TFigur = record                              // Varianter Record
             pen : TColor;
             brush : TColor;
             case Figurentyp : TFigurentyp of
               Rechteck : (Rechteck_Daten : TRechteck);
               Kreis :   (Kreis_Daten : TKreis);
               Dreieck : (Dreieck_Daten : TDreieck);
           end;

BenjaminH 14. Mai 2006 17:30

Re: Geometrie
 
Du kannst doch die Abstände der Punkte AB, AC, BC berechenen (tust du ja schon)
und wenn jetzt die Summe der beiden kleineren gleich dem größten Abstand ist, dann liegen sie auf einer geraden.
Kann es sein, dass sqr(a1)+sqr(a3) zu groß wird, und dann die Wurzel aus was negativem gezogen werden soll?


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:54 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