Nejste přihlášen/a.
Zdravím,
mám naimplementovaného Bresenhama, ale nefunguje pro úsečky s úhlem>45°. Nevíte proč? Je to ze skript od vyučujícího,
pocatecni bod(xz, yz)
koncovy bod(xk, yk)
int deltaY = yk - yz;
Aniz bych o problematice cokoliv vedel, tak z tech par stranek, co jsem si ted na Internetu u Bresenhamove algoritmu precetl, tak je definovan jen pro uhly (0° - 45° (a z logiky algoritmu - tedy "pristi bod rovne nebo o jeden pixel nahoru", i vyplyva, ze vetsi uhel nez 45° vykreslit nemuze.
Prvni, co me napada, jak to osetrit, je zkonvertovat ten algoritmus pro hlavni posun ve smeru osy "y"misto "x"(zrejme jen vhodnym prohozenim dodavanim parametru "x"a "y"do algoritmu). Jak se to ale dela v praxi, to jsem si jeste nenacetl a necham to na tobe
Máš pravdu. Počítá se s tím, že je do 45% a rostoucí (xz
Pak mám uvedeno ve skriptech: případ úsečky se sklonem>45° se řeší přehozením x a y. A následuje ta druhá část:
h1 = 2*Math.abs(deltaX); h2 = h1 - 2*deltaY; h = h1 - deltaY;Kdyžtak koukni sem: skripta odkud to mám.
Na straně 3 začíná Bresenham, na konci strany 5 je výsledný algoritmus, na začátku strany 6 ten pro sklon>45°. Tak kdyžtak pls koukni. Na obrázku je jak to mám v programu.
Ted v tom screenshotu uz alespon vidim parametry toho "for"a odkud kam vedou bloky, coz v tom tvem predchozim vypisu nebylo mozne a dokonce to tam uplne chybelo (nepouzil si tagy CODE pro neformatovani textu, jak je zde doporuceno).
Pises to v peknych NetBeans. To musi byt uplne trivialni to odladit pres pozorovani promennych.
Dneska uz jdu vazne do postele.
Myslel jsem na to cely den, ale jeste jsem se k tomu nedostal. Musim to odsunout na dnesni pozdni noc.
Stejne se mi jako nejlepsi reseni jevi to, ze si tam zapnes to monitorovani obsahu promennych, pustis na to tu moji doporucnenou krivku (stoupani o 10 pixelu ("y") na 4 pixely osy "x") a budes se koukat, jak se ti to tam meni a proc to nefunguje.
Ja tam zadnou chybu nevidim
Zadavas tam jen pocatecni a koncove body tak, aby lezely v 1.kvadrantu (tj. uhly 0°..90°)? Protoze pro ostatni kvadranty to nemas podle me spravne osetrene. Myslim, ze by stacilo, kdyby jsi misto if(deltaX>deltaY) mel if(abs(deltaX)>(abs(deltaY)).
Vic uz k tomu asi nevymyslim.
Je to ale pekny algoritmus. Musim si ho pamatovat.
Neneseme odpovědnost za správnost informací a za škodu vzniklou jejich využitím. Jednotlivé odpovědi vyjadřují názory jejich autorů a nemusí se shodovat s názorem provozovatele poradny Poradte.cz.
Používáním poradny vyjadřujete souhlas s personifikovanou reklamou, která pomáhá financovat tento server, děkujeme.