Avatar billede al1407 Nybegynder
14. oktober 2004 - 18:13 Der er 5 kommentarer og
1 løsning

Er et givent rektangels punkter indenfor et koordinatsæt

Jeg laver noget der tegner på skærmen (ikke i Windows) og her bruger jeg nogle variabler til at definere et slags "clipping" område. Altså, et område hvor der må tegnes.

Hvis f.eks. Line, Box, FillBox funktionerne kaldes med punkter der ligger uden for clipping området, skal der kun tegnes indenfor det angivne område.

Hvis jeg har et rektangel angivet med X1, Y1, X2 og Y2 og et clipping område angivet på samme måde, hvordan kan jeg her kontrollore om de angivne koordinater slet ikke er indenfor clipping området?

For nemhedens skyld, lad os da specificere et skærmområde på 640x480 med et clipping koordinatsæt som følger:

cX1 = 160, cY1 = 120
cX2 = 320, cY2 = 240

En linie, boks eller fyldt boks skal tegnes med flg. koordinater:

lX1 = 100, lY1 = 100
lX2 = 200, lY2 = 200

Jeg har tænkt en del over den, og søgt på Google, men har ikke fundet en løsning.
Avatar billede roenving Novice
14. oktober 2004 - 18:20 #1
Du må tage hver af dine koordinater og normalisere dem efter clipping-området, altså sådan:

lX1 = 100
lX2 = 200

hvis lX1 < cX1 så er lX1 = cX1
hvis lX2 < cX1 så er lX2 = cX1
hvis lX1 > cX2 så er lX1 = cX2
hvis lX2 > cX2 så er lX2 = cX2

-- og det samme med dine y-værdier !-)
Avatar billede al1407 Nybegynder
14. oktober 2004 - 18:38 #2
Hvis jeg bruger den metode, som du skriver så kan jeg ikke finde ud af om det der skal tegnes er helt uden for det angivne clipping område?

Det du gør, som jeg også selv har gjort, er hvis noget af det der skal tegnes, skal tegnes inden i området, så rettes koordinaterne så f.eks. linien, reelt set, bliver mindre.
Avatar billede roenving Novice
14. oktober 2004 - 18:42 #3
Hvis en given figur er helt udenfor området vil det blive en streg eller et punkt, som ligger på clipping-grænsen ...

Hvis du ved, at alle koordinater er normaliserede, altså at den mindste står først kan du:

hvis lX1 < cX1 så er lX1 = cX1
hvis lX2 < cX1 så abort
hvis lX1 > cX2 så abort
hvis lX2 > cX2 så er lX2 = cX2
Avatar billede al1407 Nybegynder
14. oktober 2004 - 19:14 #4
Den var jeg længe om at fatte :S
Men det virker nu - tak :)

Gider du lægge et svar?
Avatar billede roenving Novice
14. oktober 2004 - 22:07 #5
Velbekomme '-)
Avatar billede roenving Novice
15. oktober 2004 - 14:11 #6
-- og tak for point ;~}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester