![]() |
Drei Werte als Punkt im Dreieck darstellen
Hallo,
ich habe hier drei Werte, die ich in einem Diagramm darstellen will. Die drei Werte haben jeweils einen Bereich von 0 bis 1. Mein Plan ist, diese Werte in einem gleichschenkligen Dreieck darzustellen. Wenn z. B. alle drei Werte gleich sind, soll ein Punkt in der Mitte des Dreiecks gezeichnet werden, wenn zwei Werte null sind, soll ein Punkt an einer Spitze des Dreiecks gezeichnet werden. Sind zwei Werte gleich groß und der dritte null, dann muss der Punkt in der Mitte eines Schenkels gezeichnet werden. Ansonsten soll der Punkt relativ zu den Eckpunkten in der Dreiecksfläche positioniert sein. Da gibt's doch sicher eine Formel für? Gruß xaromz |
AW: Drei Werte als Punkt im Dreieck darstellen
Sicher.. nennt sich Dreisatz...
Der Nullpunkt ist die Mitte des Dreiecks, 1 befindet sich an den jeweiligen Dreiecks-Eckpunkten. Die Position des entsprechenden Wertes kannst Du dann auf der Linie zwischen Mittelpunkt und Eckpunkt reininterpolieren... Grüße |
AW: Drei Werte als Punkt im Dreieck darstellen
Hallo,
nicht so ganz. Ich will ja nicht drei Punkte ins Dreieck malen, sondern nur einen. Die drei Werte sind quasi die x,y,z Koordinaten des Punktes. Vielleicht lässt es sich besser so erklären: Die drei Werte ziehen den Punkt jeweils in Richtung ihrer Ecke. Dabei sind die Werte relativ zueinander zu betrachten. Gruß xaromz |
AW: Drei Werte als Punkt im Dreieck darstellen
Hallo,
ah OK, das habe ich überlesen, dass es nur ein Punkt sein soll. d.h. du brauchst den Schwerpunkt des Dreiecks mit unterschiedlich gewichteten Eckpunkten - da muss ich passen. Mit etwas Zeit könnte ich da aber sicherlich was zusammenbasteln.... so jetzt... den Schwerpunkt rechnest Du mit
Code:
aus diesem Mittel machst Du jetzt ein gewichtetes mittel... wenn mich nicht alles täuscht:
xS = (xA + xB + xC)/3
yS = (yA + yB + yC)/3 Quelle und Herleitung: http://www.arndt-bruenner.de/mathe/geometrie/schwerpunktdreieck.htm
Code:
wobei nA..nC deine drei Werte von 0..1 sind.
xS = ((nA*xA)/(nA+nB+nC) + (nB*xB)/(nA+nB+nC) + (nC*xC)/(nA+nB+nC))/(3)
yS = ((nA*yA)/(nA+nB+nC) + (nB*yB)/(nA+nB+nC) + (nC*yC)/(nA+nB+nC))/(3) |
AW: Drei Werte als Punkt im Dreieck darstellen
Zitat:
Kannst du noch etwas über die Werte selbst sagen? Du erwähnst, daß es sich dabei um x,y,z-Koordinaten im Bereich 0..1 handelt. Ist das zufällig ein Richtungsvektor, bei dem immer
Delphi-Quellcode:
ist?
x² + y² + z² = 1
|
AW: Drei Werte als Punkt im Dreieck darstellen
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Uwe,
die drei Werte sind eigentlich willkürlich, werden aber in der Bereich transformiert (die Originaldaten sind IMHO im Bereich 0..3 und stellen Kompetenzwerte dar). Die Werte selbst haben erstmal keinerlei Bezug zueinander (sind also auch keine Koordinaten), sollen aber in Bezug gebracht werden. Ich hab mal ein Beispiel angehängt (die Position stimmt natürlich nicht). Gruß xaromz |
AW: Drei Werte als Punkt im Dreieck darstellen
so, habe oben die Gleichung für das gew. Mittel nochmal korrigiert. Damit konnte ich plausible Werte ermitteln.
Grüße |
AW: Drei Werte als Punkt im Dreieck darstellen
Hallo,
danke. Ich habe die Formel noch etwas angepasst, jetzt spuckt sie die richtigen Werte aus. Gruß xaromz |
AW: Drei Werte als Punkt im Dreieck darstellen
@Lemmy
die Division / 3 ist zuviel .....
Delphi-Quellcode:
procedure TForm3.Button1Click(Sender: TObject);
Type TParry=Array [0..3] of Tpoint; TCMP=Array[0..2] of Double; var p,hp:TParry; CMP:TCMP; zp:Tpoint; begin p[0].x := 0; p[0].y := 0; p[1].x := 300; p[1].y := 0; p[2].x := (p[1].x - p[0].x) div 2; p[2].y := Round(Sin(DegToRad(60))*(p[1].x - p[0].x) + p[0].x ); p[3] := p[0]; CMP[0] := 0.5; CMP[1] := 0.5; CMP[2] := 0.9; { CMP[0] := 0.5; CMP[1] := 0.5; CMP[2] := 0.5; } Assert(CMP[0]+ CMP[1]+ CMP[2] <> 0); zp.x := Round(((CMP[0]*p[0].x)/( CMP[0]+ CMP[1]+ CMP[2]) + (CMP[1]*p[1].x)/( CMP[0]+ CMP[1]+ CMP[2]) + (CMP[2]*p[2].x)/( CMP[0]+ CMP[1]+ CMP[2]))); zp.y := Round(((CMP[0]*p[0].y)/( CMP[0]+ CMP[1]+ CMP[2]) + (CMP[1]*p[1].y)/( CMP[0]+ CMP[1]+ CMP[2]) + (CMP[2]*p[2].y)/( CMP[0]+ CMP[1]+ CMP[2]))); Image1.Canvas.Polyline(p); image1.Canvas.Ellipse(zp.x-2,zp.y-2,zp.x+2,zp.y+2); end; |
AW: Drei Werte als Punkt im Dreieck darstellen
Um es mal wieder auf die reine Berechnung des Punktes zu beschränken, da ich über die Zeichenfläche ja nichts weiß:
Delphi-Quellcode:
Allerdings ist das auch nur an den Rändern und in der Mitte gemäß den Randbedingungen. Für die Proportionalität dazwischen gibt es unterschiedliche Lösungen.
procedure CalcPoint(A, B, C: Double; var X, Y: Double);
{ es gilt: -0.5 <= X <= 0.5 und 0 <= Y <= 1 X=0, Y=0 entspricht dem Mittelpunkt der unteren Linie des Dreiecks und bedeutet (A = 0) und (B = C) } begin Assert((A >= 0) and (B >= 0) and (C >= 0)); if IsZero(B + C) then X := 0 else X := C/(B + C) - 0.5; // Verhältnis C:B if IsZero(A + B + C) then Y := 0.5 else Y := A/(A + B + C); // Verhältnis A:(B+C) X := X * (1 - Y); end; @Bummi: jemand ohne Kompetenz
Delphi-Quellcode:
erzeugt bei deinem Code ein EDivByZero.
(A = B = C = 0)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:56 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