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.