Autor Beitrag
Flash106
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 234


D7 Ent
BeitragVerfasst: Di 14.12.04 07:44 
Hi,

Ich möchte gerne schräge Ellipsen zeichen. Also solche die von oben links nach unten rechts gehen.. hat jemand ne idee???
so in etwa:

ausblenden Quelltext
1:
2:
3:
4:
5:
(--)
 \  \
  \  \
   \  \
    (---)

ihr könnt es auch vorstellen?? =) ...

Danke!!
Lossy eX
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1048
Erhaltene Danke: 4



BeitragVerfasst: Di 14.12.04 08:47 
Also so spontan würden mir zwei Wege einfallen um dies zu realisieren allerdings haben die beide Nachteile.

1. Du zeichnest eine Ellipse in ein TBitmap und drehst dieses dann um eine gewisse Gradzahl. Den Algorithmus zum drehen von Bildern sollte man recht einfach mit Google finden können. Diese Methode ist nicht sonderlich Flexibel, da die Ellipse vorberechnet wird. Du kannst so aber auch nicht genau sagen wie groß sie im Endeffekt wird. Also ziemlich ungeeignet wenn du Pixelgenau zeichnen musst.

2. Du schnappst dir einen Ellipsenalgorithmus (google) und erweiterst diesen so, dass du nach unten hin entsprechend um die Anzahl an schräger Pixel deine Ausgangspixel verschiebst. Du betrachtest deine Ellipse an der Stelle zeilenweise und verschiebst entsprechend die Zeilen nach rechts oder Links. Hat aber den Nachteil, dass es dadurch keine genaue Ellipse mehr hast. (was beim drehen der Fall wäre)

Evtl. könntest du dir auch den Algorithmus schnappen und dann entsprechend schon in diesem deine Ausgabe drehen. Allerdings weiß ich nicht ob das so einfach möglich ist. Dafür ist es noch zu früh und ich habe noch nicht genug Kaffee intus. ;-)

Wozu brauchst du das denn genau? Evtl gibt es ja noch eine ganz andere Lösung.

_________________
Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.
Phantom1
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 390



BeitragVerfasst: Di 14.12.04 09:59 
Eine gedrehte Ellipse brauchte ich auch schonmal. Hier der code von mir:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
Procedure DrawEllipse(Dest: TCanvas;
                      xCenter, yCenter,         // mittelpunkt x,y
                      xRadius, yRadius: Single; // breite, höhe
                      RotateAngle: Single = 0;  // winkel (0° bis 360°) drehung im uhrzeigersinn
                      sAngle: Single = 0;       // ARC start winkel
                      eAngle: Single = 360;     // ARC end winkel
                      Precision: Byte = 60);    // genauigkeit
Var
  rAngle, step: Single;
  x1, y1: Integer;

  Procedure GetPos(Angle: Single; Out x1, y1: Integer);
  Var x, y, Theta: Single;
  Begin
    Theta:=DegToRad(Angle);
    x:=xRadius*Sin(-Theta);
    y:=yRadius*Cos(-Theta);
    x1:=Round(xCenter-x*Cos(rAngle)+y*Sin(rAngle));
    y1:=Round(yCenter-x*Sin(rAngle)-y*Cos(rAngle));
  End;

begin
  rAngle:=DegToRad(RotateAngle);
  step:=(eAngle-sAngle)/Precision;
  GetPos(sAngle,x1,y1);
  Dest.MoveTo(x1,y1);
  sAngle:=sAngle+step;
  While sAngle<eAngle Do Begin
    GetPos(sAngle,x1,y1);
    Dest.LineTo(x1,y1);
    sAngle:=sAngle+step;
  End;
  GetPos(eAngle,x1,y1);
  Dest.LineTo(x1,y1);
End;


Beispiel: DrawEllipse(Canvas, 100, 100, 50, 100, 45);

mfg