AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Drei Werte als Punkt im Dreieck darstellen

Ein Thema von xaromz · begonnen am 2. Okt 2012 · letzter Beitrag vom 5. Okt 2012
Antwort Antwort
Seite 1 von 2  1 2   
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#1

Drei Werte als Punkt im Dreieck darstellen

  Alt 2. Okt 2012, 10:39
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
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.364 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Drei Werte als Punkt im Dreieck darstellen

  Alt 2. Okt 2012, 10:52
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
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#3

AW: Drei Werte als Punkt im Dreieck darstellen

  Alt 2. Okt 2012, 11:06
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
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.364 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Drei Werte als Punkt im Dreieck darstellen

  Alt 2. Okt 2012, 11:19
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:
xS = (xA + xB + xC)/3
yS = (yA + yB + yC)/3 
Quelle und Herleitung: http://www.arndt-bruenner.de/mathe/geometrie/schwerpunktdreieck.htm
aus diesem Mittel machst Du jetzt ein gewichtetes mittel... wenn mich nicht alles täuscht:


Code:
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)
wobei nA..nC deine drei Werte von 0..1 sind.

Geändert von Lemmy ( 2. Okt 2012 um 12:53 Uhr) Grund: Korrektur gew. Mittel
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
10.934 Beiträge
 
Delphi 12 Athens
 
#5

AW: Drei Werte als Punkt im Dreieck darstellen

  Alt 2. Okt 2012, 11:55
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.
Diese Angaben bestimmen den Punkt nur für die Fälle in denen ein oder zwei Werte 0 sind bzw. zwei oder drei Werte gleich sind, sagen aber nichts über die relative Position bei anderen Werten aus.

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 x² + y² + z² = 1 ist?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#6

AW: Drei Werte als Punkt im Dreieck darstellen

  Alt 2. Okt 2012, 12:18
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
Miniaturansicht angehängter Grafiken
beispiel.png  
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.364 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: Drei Werte als Punkt im Dreieck darstellen

  Alt 2. Okt 2012, 12:54
so, habe oben die Gleichung für das gew. Mittel nochmal korrigiert. Damit konnte ich plausible Werte ermitteln.

Grüße
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#8

AW: Drei Werte als Punkt im Dreieck darstellen

  Alt 2. Okt 2012, 13:35
Hallo,

danke. Ich habe die Formel noch etwas angepasst, jetzt spuckt sie die richtigen Werte aus.

Gruß
xaromz
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#9

AW: Drei Werte als Punkt im Dreieck darstellen

  Alt 2. Okt 2012, 13:36
@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;
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)

Geändert von Bummi ( 2. Okt 2012 um 14:22 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
10.934 Beiträge
 
Delphi 12 Athens
 
#10

AW: Drei Werte als Punkt im Dreieck darstellen

  Alt 2. Okt 2012, 14:00
Um es mal wieder auf die reine Berechnung des Punktes zu beschränken, da ich über die Zeichenfläche ja nichts weiß:

Delphi-Quellcode:
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;
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.

@Bummi: jemand ohne Kompetenz (A = B = C = 0) erzeugt bei deinem Code ein EDivByZero.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 16:41 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