Einzelnen Beitrag anzeigen

Michael II

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
778 Beiträge
 
Delphi 11 Alexandria
 
#23

AW: Ellipsenalgo aus Formelsammlung kreieren

  Alt 11. Jul 2025, 00:27
Für Rastergrafik: Midpoint Algorithmus für Kreis und Ellipse

https://www.geeksforgeeks.org/dsa/mi...ing-algorithm/

(könnte man erweitern (stangle,endangle))

Delphi-Quellcode:
procedure DrawEllipseMidpoint(xc, yc, rx, ry: Integer);
var
  x, y: Int64;
  rx2, ry2: Int64;
  twoRx2, twoRy2: Int64;
  px, py: Int64;
  p: Int64;
begin
  x := 0;
  y := ry;

  rx2 := rx * rx;
  ry2 := ry * ry;
  twoRx2 := 2 * rx2;
  twoRy2 := 2 * ry2;

  // Region 1
  p := Round(ry2 - (rx2 * ry) + (0.25 * rx2));
  px := 0;
  py := twoRx2 * y;

  while px < py do
  begin
    // 4-fache Symmetrie
    DrawPixel(xc + x, yc + y);
    DrawPixel(xc - x, yc + y);
    DrawPixel(xc + x, yc - y);
    DrawPixel(xc - x, yc - y);

    Inc(x);
    px := px + twoRy2;

    if p < 0 then
      p := p + ry2 + px
    else
    begin
      Dec(y);
      py := py - twoRx2;
      p := p + ry2 + px - py;
    end;
  end;

  // Region 2
  p := Round(ry2 * (x + 0.5) * (x + 0.5) + rx2 * (y - 1) * (y - 1) - rx2 * ry2);
  px := twoRy2 * x;
  py := twoRx2 * y;

  while y >= 0 do
  begin
    // 4-fache Symmetrie
    DrawPixel(xc + x, yc + y);
    DrawPixel(xc - x, yc + y);
    DrawPixel(xc + x, yc - y);
    DrawPixel(xc - x, yc - y);

    Dec(y);
    py := py - twoRx2;

    if p > 0 then
      p := p + rx2 - py
    else
    begin
      Inc(x);
      px := px + twoRy2;
      p := p + rx2 - py + px;
    end;
  end;
end;
Michael Gasser
  Mit Zitat antworten Zitat