krzywe Beziera - kilka pytan

problemy z tworzeniem aplikacji graficznych oraz audio i wideo

krzywe Beziera - kilka pytan

Nowy postprzez ern777est » niedziela, 17 maja 2009, 22:29

Witam.
Piszę program wykorzystujący krzywe Beziera. Znajduje się on w załączniku (niebieski piksele to punkty kontrolne (możnaje przesuwać, najlepiej z lupą), czerwony piksel to punkt w którym wlewam farbę).
ProszÄ™ o pomoc w kilku kwestiach:
1. Czy jest inny sposób na zamknięcie krzywej niż podanie pierwszemu i ostatniemu punktowi tych samych współżędnych (stosuję funkcję PolyBezier)?
2. Czy jest możliwe wypełnienie krzywej w inny sposób niż przez FloodFill? Krzywą z programu można przekształcić przesuwając punkty tak, że piksel gdzie wlewam farbę jest poza jej obszarem. Wtedy zamknięte obszary krzywej przybierają biały kolor wypełnienia (chciałbym dostać się do parametru określającego ten kolor).
3. Jak w BCB wykonać algorytm Sutherlanda-Hodgmana (dokładnie chodzi mi o narysowanie zamkniętej krzywej wewnątrz innej zamkniętej krzywej)?
Nie masz wystarczających uprawnień, aby zobaczyć pliki załączone do tego postu.
Avatar użytkownika
ern777est
Bladawiec
Bladawiec
 
Posty: 5
Dołączył(a): niedziela, 28 grudnia 2008, 00:33
PodziÄ™kowaÅ‚ : 0
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
    NieznanyNieznana

Re: krzywe Beziera - kilka pytan

Nowy postprzez Cyfrowy Baron » Å›roda, 20 maja 2009, 13:17

1. Czy jest inny sposób na zamknięcie krzywej niż podanie pierwszemu i ostatniemu punktowi tych samych współżędnych (stosuję funkcję PolyBezier)?


Funkcja PolyBezier jest tak skonstruowana, ze wymaga podania tych punktów, więc nie ma tutaj żadnej dowolności.

Kod: Zaznacz cały
  POINT aptTriangle[] = {50,50, 98,86,  2,86, 50,50};
  HDC hDC = this->Canvas->Handle;
  PolyBezier(hDC, aptTriangle, ARRAYSIZE(aptTriangle));


Jak zapewne wiesz funkcja PolyBezier nie narysuje trójkąta, gdyż zaokrągla ostatnią linię, więc gdybym chciał narysować trójkąt to oczywiście lepiej jest użyć funkcji Polyline:

Kod: Zaznacz cały
  POINT aptTriangle[] = {50,50, 98,86,  10,86, 50,50};
  HDC hDC = this->Canvas->Handle;
  Polyline(hDC, aptTriangle, ARRAYSIZE(aptTriangle));




Czy jest możliwe wypełnienie krzywej w inny sposób niż przez FloodFill?

Klasa TCanvas korzysta tylko z funkcji FloodFill. Może powinieneś skupić się raczej na GDI+.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Aplikacje multimedialne, graficzne

Kto przeglÄ…da forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 1 gość