Hallo Jens, schön daß du dabei bist. Hab dich letztens
vermisst. Das hier brauch ich nämlich für runde Querschnitte (statt Polyeder). Hab mir mal eben das aus den Rippen geleiert. Sollte doch richtig sein?
Delphi-Quellcode:
function CylinderSectionCenterX(const D, H: double): double;
const
N = 1000;
var
I: integer;
Value, Alpha, R, A, S, xS, SumM, SumA: double;
begin
Result := 0;
if (CompareValue(H, 0) > 0) and (CompareValue(H, D) <= 0) then
begin
SumM := 0;
SumA := 0;
R := D / 2;
for I := 1 to N do
begin
Value := H / N * I;
Alpha := 2 * ArcCos(1 - Value / R);
S := D * Sin(Alpha / 2);
A := R * R / 2 * (Alpha - Sin(Alpha));
xS := R - S * S * S / 12 / A; // Von oben;
SumA := SumA + A;
SumM := SumM + A * xS;
end;
Result := SumM / SumA;
end;
end;
https://de.m.wikipedia.org/wiki/Kreissegment