![]() |
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)? |
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.
|
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.
|
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 |
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:
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. |
Re: Geometrie
Zitat:
|
Re: Geometrie
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
|
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 |
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; |
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 15:00 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz