1 Wstęp teoretyczny. Temat: Obcinanie odcinków do prostokąta. Grafika komputerowa 2D. Instrukcja laboratoryjna Prostokąt obcinający

Podobne dokumenty
Wprowadzenie do grafiki maszynowej. Wprowadzenie do algorytmów obcinania i okienkowania

Obcinanie prymitywów. Mirosław Głowacki Wydział Inżynierii Metali i Informatyki Przemysłowej AGH

WYKŁAD 3 WYPEŁNIANIE OBSZARÓW. Plan wykładu: 1. Wypełnianie wieloboku

Rysowanie precyzyjne. Polecenie:

KGGiBM GRAFIKA INŻYNIERSKA Rok III, sem. VI, sem IV SN WILiŚ Rok akademicki 2011/2012

9. Podstawowe narzędzia matematyczne analiz przestrzennych

FIGURY I PRZEKSZTAŁCENIA GEOMETRYCZNE

KONSTRUKCJA TRÓJKĄTA 1 KONSTRUKCJA TRÓJKĄTA 2 KONSTRUKCJA CZWOROKĄTA KONSTRUKCJA OKRĘGU KONSTRUKCJA STYCZNYCH

Ćwiczenia z Geometrii I, czerwiec 2006 r.

Planimetria VII. Wymagania egzaminacyjne:

PRÓBNY EGZAMIN MATURALNY Z MATEMATYKI

Klucz odpowiedzi do zadań zamkniętych i przykładowe rozwiązania zadań otwartych

3. Macierze i Układy Równań Liniowych

11. Znajdż równanie prostej prostopadłej do prostej k i przechodzącej przez punkt A = (2;2).

FUNKCJA LINIOWA, RÓWNANIA I UKŁADY RÓWNAŃ LINIOWYCH

Geometria analityczna

Animacje z zastosowaniem suwaka i przycisku

Praktyczne przykłady wykorzystania GeoGebry podczas lekcji na II etapie edukacyjnym.

Regionalne Koło Matematyczne

FUNKCJA LINIOWA - WYKRES

Skrypt 23. Geometria analityczna. Opracowanie L7

PODSTAWOWE KONSTRUKCJE GEOMETRYCZNE

Propozycje rozwiązań zadań otwartych z próbnej matury rozszerzonej przygotowanej przez OPERON.

IX Olimpiada Matematyczna Gimnazjalistów

Metoda objętości zadania

GEOMETRIA ANALITYCZNA. Poziom podstawowy

Twierdzenie Talesa. Adrian Łydka Bernadeta Tomasz. Teoria

LX Olimpiada Matematyczna

Dydaktyka matematyki (III etap edukacyjny) IV rok matematyki Semestr letni 2017/2018 Ćwiczenia nr 6

X Olimpiada Matematyczna Gimnazjalistów

Funkcje liniowe i wieloliniowe w praktyce szkolnej. Opracowanie : mgr inż. Renata Rzepińska

Dydaktyka matematyki (II etap edukacyjny) II rok matematyki Semestr letni 2016/2017 Ćwiczenia nr 9

Przykładowe rozwiązania zadań. Próbnej Matury 2014 z matematyki na poziomie rozszerzonym

PRÓBNY EGZAMIN MATURALNY Z MATEMATYKI poziom rozszerzony

LXI Olimpiada Matematyczna

PLANIMETRIA CZYLI GEOMETRIA PŁASZCZYZNY CZ. 1

Rysunek 1. Udowodnij, że AB CD = BC DA. Rysunek 2. Po inwersji o środku w punkcie E. Rysunek 3. Po inwersji o środku w punkcie A

VII Olimpiada Matematyczna Gimnazjalistów

KONKURS ZOSTAŃ PITAGORASEM MUM. Podstawowe własności figur geometrycznych na płaszczyźnie

TWORZENIE OBIEKTÓW GRAFICZNYCH

MATEMATYKA DLA CIEKAWSKICH. Twierdzenie Pitagorasa inaczej cz. 2

Figury geometryczne. 1. a) Narysuj prostą prostopadłą do prostej, przechodzącą przez punkt. b) Narysuj prostą równoległą do prostej,

PRÓBNY EGZAMIN MATURALNY Z MATEMATYKI LISTOPAD 2010 POZIOM PODSTAWOWY. Czas pracy: 170 minut. Liczba punktów do uzyskania: 50 WPISUJE ZDAJĄCY

Geometria. Rozwiązania niektórych zadań z listy 2

Notatki przygotowawcze dotyczące inwersji na warsztaty O geometrii nieeuklidesowej hiperbolicznej Wrocław, grudzień 2013

Wykład 16. P 2 (x 2, y 2 ) P 1 (x 1, y 1 ) OX. Odległość tych punktów wyraża się wzorem: P 1 P 2 = (x 1 x 2 ) 2 + (y 1 y 2 ) 2

w jednym kwadrat ziemia powietrze równoboczny pięciobok

PRÓBNY EGZAMIN MATURALNY Z MATEMATYKI

A. fałszywa dla każdej liczby x.b. prawdziwa dla C. prawdziwa dla D. prawdziwa dla

EGZAMIN MATURALNY Z MATEMATYKI POZIOM PODSTAWOWY 7 MAJA Godzina rozpoczęcia: 9:00. Czas pracy: 170 minut. Liczba punktów do uzyskania: 50

AUTORKA: ELŻBIETA SZUMIŃSKA NAUCZYCIELKA ZESPOŁU SZKÓŁ OGÓLNOKSZTAŁCĄCYCH SCHOLASTICUS W ŁODZI ZNANE RÓWNANIA PROSTEJ NA PŁASZCZYŹNIE I W PRZESTRZENI

RYSUNEK TECHNICZNY I GEOMETRIA WYKREŚLNA INSTRUKCJA DOM Z DRABINĄ I KOMINEM W 2D

EGZAMIN MATURALNY Z MATEMATYKI POZIOM PODSTAWOWY 4 CZERWCA Godzina rozpoczęcia: 9:00. Czas pracy: 170 minut. Liczba punktów do uzyskania: 50

Rozwiązania zadań. Arkusz maturalny z matematyki nr 1 POZIOM PODSTAWOWY

STEREOMETRIA CZYLI GEOMETRIA W 3 WYMIARACH

Własności punktów w czworokątach

NOWA FORMUŁA EGZAMIN MATURALNY Z MATEMATYKI POZIOM PODSTAWOWY MMA 2019 UZUPEŁNIA ZDAJĄCY. miejsce na naklejkę UZUPEŁNIA ZESPÓŁ NADZORUJĄCY

Treści zadań Obozu Naukowego OMG

POWTÓRKA ROZDZIAŁU III FUNKCJA LINIOWA

NOWA FORMUŁA EGZAMIN MATURALNY Z MATEMATYKI POZIOM PODSTAWOWY MMA 2018 UZUPEŁNIA ZDAJĄCY. miejsce na naklejkę UZUPEŁNIA ZESPÓŁ NADZORUJĄCY

LVIII Olimpiada Matematyczna

Zadania domowe. Ćwiczenie 2. Rysowanie obiektów 2-D przy pomocy tworów pierwotnych biblioteki graficznej OpenGL

PRZYKŁADOWY ARKUSZ EGZAMINACYJNY Z MATEMATYKI

( ) Arkusz I Zadanie 1. Wartość bezwzględna Rozwiąż równanie. Naszkicujmy wykresy funkcji f ( x) = x + 3 oraz g ( x) 2x

1.2. Ostrosłupy. W tym temacie dowiesz się: jak obliczać długości odcinków zawartych w ostrosłupach, jakie są charakterystyczne kąty w ostrosłupach.

PRÓBNY EGZAMIN MATURALNY Z NOWĄ ERĄ

SPIS TREŚCI. Do Nauczyciela Regulamin konkursu Zadania

Pętla for. Matematyka dla ciekawych świata -19- Scilab. for i=1:10... end. for k=4:-1:1... end. k=3 k=4. k=1. k=2

Cztery punkty na okręgu

Modele i symulacje - Scratch i Excel

GEOMETRIA PRZESTRZENNA (STEREOMETRIA)

Skrypt 24. Geometria analityczna: Opracowanie L5

EGZAMIN MATURALNY Z MATEMATYKI

Tematy: zadania tematyczne

6 Grafika 2D. 6.1 Obiekty 2D

9. Funkcje trygonometryczne. Elementy geometrii: twierdzenie

Twierdzenie Talesa. Adrian Łydka Bernadeta Tomasz. Teoria

PODSTAWY > Figury płaskie (1) KĄTY. Kąt składa się z ramion i wierzchołka. Jego wielkość jest mierzona w stopniach:

Bukiety matematyczne dla gimnazjum

Arkusz maturalny nr 2 poziom podstawowy ZADANIA ZAMKNIĘTE. Rozwiązania. Wartość bezwzględna jest odległością na osi liczbowej.

Projekt Era inżyniera pewna lokata na przyszłość jest współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Jarosław Wróblewski Matematyka Elementarna, zima 2014/15

Grafika komputerowa Wykład 8 Modelowanie obiektów graficznych cz. II

Czas pracy 170 minut

Wymagania edukacyjne, kontrola i ocena. w nauczaniu matematyki w zakresie. podstawowym dla uczniów technikum. część II

W(x) = Stopień wielomianu jest równy: A. B. C. D. A. B. C. D.

Praca klasowa nr 2 - figury geometryczne (klasa 6)

V Konkurs Matematyczny Politechniki Białostockiej

Odległośc w układzie współrzędnych. Środek odcinka.

Geometria. Hiperbola

Spis treści. Konwencje zastosowane w książce...5. Dodawanie stylów do dokumentów HTML oraz XHTML...6. Struktura reguł...9. Pierwszeństwo stylów...

Pole trójkata, trapezu

PRÓBNA MATURA ZADANIA PRZYKŁADOWE

Wymagania edukacyjne z matematyki

M10. Własności funkcji liniowej

Wymagania edukacyjne z matematyki

Co należy zauważyć Rzuty punktu leżą na jednej prostej do osi rzutów x 12, którą nazywamy prostą odnoszącą Wysokość punktu jest odległością rzutu

Skrypt 14. Figury płaskie Okrąg wpisany i opisany na wielokącie. 7. Wielokąty foremne. Miara kąta wewnętrznego wielokąta foremnego

PRÓBNY EGZAMIN MATURALNY Z MATEMATYKI

KONKURS MATEMATYCZNY DLA UCZNIÓW GIMNAZJUM ETAP WOJEWÓDZKI

Transkrypt:

Instrukcja laboratoryjna 3 Grafika komputerowa 2D Temat: Obcinanie odcinków do prostokąta Przygotował: dr inż. Grzegorz Łukawski, mgr inż. Maciej Lasota, mgr inż. Tomasz Michno 1 Wstęp teoretyczny 1.1 Prostokąt obcinający Prostokąt obcinający (nazywany również widokiem ang. viewport) jest prostokątnym obszarem wyświetlającym wewnątrz siebie obraz, którego pozostała część jest niewidoczna poza jego obrębem. Najczęściej jego krawędzie są równoległe do krawędzi ekranu (chociaż czasami zdarzają się wyjątki, jednak na laboratoriach nie będziemy się nimi zajmowali). 0,0 x min x max y min PROSTOKĄT OCINJĄCY y max Fragment rysunku widoczny w prostokącie obcinającym Niewidoczny fragment rysunku (poza prostokątem obcinającym) Na rysunku można zauważyć prosty obraz, który jest widoczny jedynie częściowo, fragment pozostający poza prostokątem obcinającym nie zostaje wyświetlony. Prostokąt obcinający można opisać poniższymi nierównościami: x min x x max y min y y max (1.1) 1.2 Obcinanie punktów Sprawdzenie, czy punkt P(x,y) leży wewnątrz prostokąta obcinającego sprowadza się do sprawdzenia nierówności (1.1). Jeżeli wszystkie nierówności zostają spełnione, punkt leży 1/6

wewnątrz, w przeciwnym przypadku na zewnątrz prostokąta. 1.3 Obcinanie odcinków Obcinanie odcinków jest operacją trudniejszą niż obcinanie punktów, ponieważ może wystąpić jeden z czterech różnych przypadków: a) odcinek leży na zewnątrz prostokąta obcinającego b) odcinek leży wewnątrz prostokąta obcinającego c) odcinek leży częściowo wewnątrz, a częściowo na zewnątrz prostokąta obcinającego d) odcinek przecina prostokąt obcinający a) b) c) d) by sprawdzić, który przypadek należy rozpatrzyć, wystarczy zamiast wszystkich punktów odcinka sprawdzić jedynie jego dwa punkty początkowy i końcowy. Jeżeli: oba punkty leżą wewnątrz prostokąta, otrzymujemy przypadek b) i możemy narysować cały odcinek jeden z punktów leży wewnątrz prostokąta, natomiast drugi na zewnątrz przypadek c), należy znaleźć punkt przecięcia odcinka i prostokąta 2/6

oba punkty leżą na zewnątrz prostokąta przypadek a) lub d) należy dodatkowo sprawdzić, czy odcinek nie przecina prostokąta Sprawdzenie, czy odcinek przecina prostokąt polega na sprawdzeniu, czy odcinek przecina kolejno każdy z boków prostokąta (które też są odcinkami). by uprościć zadanie można obliczyć punkt przecięcia dwóch prostych prostej na której leży odcinek i prostej na której leży dany bok prostokąta. Następnie wystarczy sprawdzić, czy obliczony punkt przecięcia spełnia nierówności (1.1) jeżeli tak, odcinek przecina dany bok prostokąta. Ogólne równanie prostej ma postać: y=ax+b (1.2) proste w których znajdują się boki prostokąta można więc zdefiniować następująco (zgodnie z rysunkiem na początku instrukcji): x = x min ; x= x max ; y=y min ; y= y max Natomiast w celu wyznaczenia prostej (znalezienie współczynników a i b), na której leży rozpatrywany odcinek wystarczy rozwiązać układ równań, podstawiając w miejsca x i y wartości punktu początkowego i końcowego. Następnie, gdy mamy już obliczone wzory obu prostych, w celu znalezienia punktu przecięcia należy rozwiązać poniższy układ równań: y=a 1 x+b 1 y=a 2 x+b 2 Równanie prostej na której leży bok prostokąta Równanie prostej na której leży odcinek (1.3) 1.4 lgorytm Cohena-Sutherlanda Poniższy opis algorytmu został oparty o opis znajdujący się w książce: Michał Jankowski, Elementy grafiki komputerowej, WNT 2006 Ponieważ problem obcinania obrazu jest dosyć często spotykany, powstały algorytmy które upraszczają ten proces. Jednym z nich jest algorytm Cohena-Sutherlanda. Podstawowym założeniem jest użycie dla punktów początkowego i końcowego odcinka czterobitowego kodu, określającego położenie względem prostokąta obcinającego. Kod dla punktu P ma następującą postać: kod(p) = b 3 b 2 b 1 b 0, gdzie: (1.4) b 0 = 1, gdy punkt leży na lewo od prostokąta, 3/6

b 1 = 1, gdy punkt leży na prawo od prostokąta, b 2 = 1, gdy punkt leży poniżej prostokąta, b 3 = 1, gdy punkt leży powyżej prostokąta Dla punktu leżącego wewnątrz prostokąta kod przyjmuje wartość 0000, natomiast pozostałe wartości gdy znajduje się poza nim. Dzięki tej właściwości można łatwo określić, czy cały odcinek znajduje się poza prostokątem. Wystarczy wykonać operację ND na bitach obu punktów odcinka: kod(p p ) ND kod (P k ) = abcd (1.5) Jeżeli otrzymany wynik (abcd) jest różny od 0000, wtedy odcinek leży na zewnątrz prostokąta. Jeżeli wynikiem jest 0000, oznacza to że odcinek leży w całości wewnątrz prostokąta (gdy kody obu punktów są równe 0000) lub najprawdopodobniej go przecina (jednak nie na pewno). W tym drugim przypadku należy znaleźć punkt przecięcia odcinka z prostą zawierającą bok prostokąta. Kolejnym krokiem jest zastąpienie końca odcinka o niezerowym kodzie obliczonym punktem, dzięki czemu odrzucamy część odcinka znajdującą się poza oknem. Kroki te należy powtarzać aż do momentu, w którym możemy stwierdzić że odcinek na pewno nie leży wewnątrz prostokąta lub na pewno w nim leży. x min x max 1001 1000 1010 y min 0001 P 3 0010 0000 P 7 P 1 P 2 P 5 P 6 y max P 4 0101 0100 0110 Przykład 1. kod(p 1 ) = 0001, kod(p 2 ) = 0000 jeden z kodów różny od 0000 kod(p 1 ) ND kod(p 2 ) = 0001 ND 0000 = 0000 it b 0 kodu punktu P 1 mówi nam, że punkt ten leży na lewo od prostokąta, zatem należy znaleźć 4/6

przecięcie z prostą zawierającą lewy bok prostokąta (x=x min ). Punktem przecięcia jest punkt P 3, którego kod to 0000 (zastępujemy zatem punktem P 3 punkt P 1 ). Kolejne sprawdzenie pokazuje, że odcinek P 3 P 2 leży wewnątrz prostokąta obcinającego (natomiast P 1 P 3 już nie): kod(p 3 ) ND kod(p 2 ) = 0000 ND 0000 = 0000, oba kody równe 0000. Przykład 2. kod(p 4 ) = 0100, kod(p 5 ) = 0010 oba kody różne od 0000 kod(p 4 ) ND kod(p 5 ) = 0100 ND 0010 = 0000 it b 2 kodu punktu P 4 mówi nam, że punkt ten leży poniżej prostokąta, zatem należy znaleźć przecięcie z prostą zawierającą dolny bok prostokąta (y=y max ). Punktem przecięcia jest punkt P 6, którego kod to 0000 (zastępujemy zatem punktem P 6 punkt P 4 ) i dokonujemy dalszego sprawdzenia: kod(p 6 ) ND kod(p 5 ) = 0000 ND 0010 = 0000, jednak jeden z kodów nadal jest różny od 0000 it b 1 kodu punktu P 5 mówi nam, że punkt ten leży na prawo od prostokąta, zatem należy znaleźć przecięcie z prostą zawierającą prawy bok prostokąta (x=x max ). Punktem przecięcia jest punkt P 7, którego kod to 0000 (zastępujemy zatem punktem P 7 punkt P 5 ), sprawdzamy ponownie: kod(p 6 ) ND kod(p 7 ) = 0000 ND 0000 = 0000, oba kody równe 0000 Otrzymaliśmy zatem obcięcie odcinka P 4 P 5, dzieląc go na jeden odcinek widoczny P 6 P 7 i dwa niewidoczne: P 4 P 6 i P 7 P 5. Zapis krokowy algorytmu: Założenia: końcami odcinka są punkty P 1 (x 1, y 1 ) oraz P 2 (x 2, y 2 ) prostokąt obcinający jest ograniczony prostymi: x=x min, x=x max, y=y min, y=y max, zgodnie z poprzednimi oznaczeniami na rysunkach lgorytm: 1. Wyznacz kody punktów P 1 i P 2 - kod(p 1 ) i kod(p 2 ) 2. Sprawdź, czy kod(p 1 ) = kod(p 2 ) = 0000, jeśli tak zakończ algorytm, odcinek P 1 P 2 leży wewnątrz prostokąta, jeśli nie przejdź do punktu 3 5/6

3. Sprawdź, czy kod(p 1 ) ND kod(p 2 ) 0000, jeśli tak zakończ algorytm, odcinek P 1 P 2 leży w całości na zewnątrz prostokąta, jeśli nie przejdź do punktu 4 4. Wykonaj następujące kroki a) sprawdź, czy kod(p 1 ) = 0000, jeśli tak zamień kody oraz punkty P 1 i P 2 między sobą b) sprawdź bit b 0 punktu P 1, jeśli b 0 = 1 to: y 1 = y 1 + (x min x 1 ) * (y 2 y 1 ) / (x 2 x 1 ); x 1 =x min c) sprawdź bit b 1 punktu P 1, jeśli b 1 = 1 to: y 1 = y 1 + (x max x 1 ) * (y 2 y 1 ) / (x 2 x 1 ); x 1 =x max d) sprawdź bit b 2 punktu P 1, jeśli b 2 = 1 to: x 1 = x 1 + (y max y 1 ) * (x 2 x 1 ) / (y 2 y 1 ); y 1 =y max e) sprawdź bit b 3 punktu P 1, jeśli b 3 = 1 to: x 1 = x 1 + (y min y 1 ) * (x 2 x 1 ) / (y 2 y 1 ); y 1 =y min 2 Zadanie Napisać program, który implementuje algorytm obcinania odcinków. Program powinien rysować prostokąt obcinający na środku obszaru widocznego i wykonywać obcinanie dla dwóch dowolnych odcinków, 1 trójkąta złożonego z trzech odcinków i jednego prostokąta złożonego z 4 odcinków (wszystkie odcinki powinny być dobrane tak, aby figura mogła zmieścić się wewnątrz prostokąta). Każda z figur powinna być wyświetlana w losowym miejscu. Odcinki obcięte przez prostokąt powinny być zaznaczone na kolor zielony, natomiast odcinki odrzucone powinny być zaznaczone na kolor czerwony. W celu przyśpieszenia działania programu można stosować funkcję llegro do rysowania linii (prostokąt obcinający może być narysowany poprzez funkcję rect()). 6/6