Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Benutzung von Polygon() (Windows GDI) (https://www.delphipraxis.net/38496-benutzung-von-polygon-windows-gdi.html)

Assarbad 20. Jan 2005 00:53


Benutzung von Polygon() (Windows GDI)
 
Hiho,

ich habe da ein paar Problemchen. Wenn ich Polygon() benutze, bekomme ich statt einem Hexagon (Sechseck) ein Hexagramm (Sechsstern).

Außerdem habe ich da irgendwie Problemchen die Koordinaten so exakt zu berechnen, daß sich Anfangs- und Endpunkt wieder treffen (denn die Pixelkoordinaten sind ja nur Integers, keine Floats - was die Berechnung mit Sinus/Kosinus aber erfordern würde).

Weiß jemand Rat?

Luckie 20. Jan 2005 00:57

Re: Benutzung von Polygon() (Windows GDI)
 
Wie sieht denn dein bisheriger Quellcode aus? Nur mal so zum Testen und Rumprobieren.

Assarbad 20. Jan 2005 01:04

Re: Benutzung von Polygon() (Windows GDI)
 
Zitat:

Zitat von Luckie
Wie sieht denn dein bisheriger Quellcode aus? Nur mal so zum Testen und Rumprobieren.

Mein aktueller Quellcode ist in C++ (mit MFC), daher wohl nicht sonderlich sinnvoll. Da aber ein exaktes Mapping auf die GDI-Funcs stattfindet, kann man von den Win32-APIs auf den MFC-Code schließen.

Luckie 20. Jan 2005 01:13

Re: Benutzung von Polygon() (Windows GDI)
 
Na ja, aber irgendwas musst du falschen machen, dass dein Polygonzug wie ein Stern aussieht und nicht wie gewünscht wie ein Hexagon. Und da wäre Quellcode ganz hilfreich, denke ich. Aber Moment mal, für einen Stren braicht es doch eh mehr Punkte, asl für Hexagon. Also irgendwie stimmt was mit deinen Koordinaten nicht bzw., wie du sie errechnest. Gib sie doch mal von Hand an, ohne sie zu berechnen.

Assarbad 20. Jan 2005 02:00

Re: Benutzung von Polygon() (Windows GDI)
 
Hoppala ... die sin() und cos() Funktionen nehmen keine Grad sondern Rad, das ist zumindest eines meiner Probleme. Ich schaue mir das nochmal an.

Assarbad 20. Jan 2005 02:19

Re: Benutzung von Polygon() (Windows GDI)
 
So, hier der Code (funzt jetzt) wie gewünscht:

Code:
void CCreateGroupsView::DrawAromCycle(CDC& DC, unsigned order, unsigned length)
{
   if(!order)
      return;

   int oldidx = DC.SaveDC();
   CPoint org = DC.GetCurrentPosition();
   double angle = (pi * 2) / order, startangle = pi / 2;
   LPPOINT points = new POINT[order], currpoint;

   if(currpoint = points)
   {
      for(unsigned i = 0; i < order; i++)
      {
         currpoint->x = org.x + length * cos(i * angle + startangle);
         currpoint->y = org.y + length * sin(i * angle + startangle);
         currpoint++;
      }
      DC.Polygon(points, order);
      delete points;
   }

   DC.RestoreDC(oldidx);
}

Luckie 20. Jan 2005 02:29

Re: Benutzung von Polygon() (Windows GDI)
 
Zitat:

Zitat von Assarbad
Hoppala ... die sin() und cos() Funktionen nehmen keine Grad sondern Rad,

Hehe. Sollte aber auch in der Hilfe stehen. ;) Hat das auch dein anderes Problem gelöst? Und mal so aus Neugier: Was wird das, wenn es fertig ist?

Assarbad 20. Jan 2005 10:50

Re: Benutzung von Polygon() (Windows GDI)
 
Zitat:

Zitat von Luckie
Hat das auch dein anderes Problem gelöst?

Jupp.

Zitat:

Zitat von Luckie
Und mal so aus Neugier: Was wird das, wenn es fertig ist?

Das zeige ich dir, wenn es fertig ist.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:27 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