Чекор по чекор
Почетни чекори со Java
Објектно оријентирани концепти во Јава - Прв дел
Објектно оријентирани концепти во Јава - Втор дел
Објектно оријентирани концепти во Јава - Трет дел
Јава сервлети - Прв дел
Единствен Јава објект (singleton)
Најчести 10 грешки што ги прават Java програмерите
повеќе...
Што е тоа ...
... IDE
... Tomcat
... објект?
... класа?
... наследување?
... интерфејс?
... наследување? (прашања и одговори)
повеќе...
За загревање
Нов проект во Eclipse?
Примитивни податочни типови
Променливи
Оператори
Доделувачки, аритметички и Unary оператори
Оператори за еднаквост, релации и услови
Изрази, искази и блокови
повеќе...
Како да ...
... конвертирам java.sql.Timestamp во java.util.Date
... зададам формат на датум
... ковертирам „long“ во HEX и обратно
... прочитам датотека и променам стринг
... креирам ZIP датотека
... поврзам Apache и Tomcat користејќи mod_jk
... пратам недефиниран број на атрибути до некоја метода
повеќе...
Java преку примери
new Socket(String addr,int port)
new URL(String address)
new URL(String protocol, String host, int port, String file)
CommPort: getInputStream()
CommPortIdentifier: getPortIdentifiers()
Statement: executeQuery(String sql)
Statement: getMaxRows()
повеќе...
Грешка
Нов напис
Рубрика:
Наслов:
  
  

страна број:123
Основи на 2D графика во Java
ГЕОМЕТРИЈА ВО JAVA – Shapes & Paths

Едни од основните операции на Graphics2D  класата се пополнување на облици и исцртување на нивните надворешните линии. Оваа класа незнае многу за геометријата. Всушност со неа може да се исцрта само една работа а тоа е java.awt.Shape. Shape интерфејсот ги претставува само геометриските облици а со Graphics2D може да се исцртаат облиците (поточно границите на облиците) користејќи ја методата draw() и да се пополни нивната внатрешност со fill().
Java.awt.geom пакетот содржи корисни класи кои го имплементираат Shape интерфејсот. Постојат класи со кои се претставуваат елипси, криви, правоаголници и линии.

Java.awt.Shape

Овој интерфејс содржи четири групи на методи: getBounds(), contains(), intersects() и getPathIterator().
getBounds() методите враќаат правоаголници кои комплетно ги затвораат облиците.
public abstract Rectangle getBounds() – враќа java.awt.Rectangle кој комплетно го затвора обликот. Rectangle своите координати ги зачувува како int вредност.
public abstract Rectangle getBounds2D() – аналогно на претходното со тоа што се постигнува поголема прецизност т.е. координатите се чуваат како double. Ова метода како вредност враќа java.awt.geom.Rectangle2D.

 
слика: граници на форми

Секој облик има внатрешен и надворешен дел. Дали една точка или пак правоаголник комплетно се сместени во внатрешниот дел од обликот се проверува со методите:

public abstract boolean contains(double x, double y)
public abstract boolean contains(Point2D p)
public abstract boolean contains(double x, double y, double m, double n)
public abstract boolean contains(Rectangle2D r)

Наредниве методи проверуваат дали некој дел од правоаголникот поминува низ внатрешноста од обликот:
public abstract boolean intersects(double x, double y, double m, double n)
public abstract boolean intersects(Rectangle2D r)

Со методот getPathIterator() обликот претставен со Shape може да опише сопствена контура. Овој метод враќа објект од тип PathIterator.

Директно или индиректно секоја геометриска класа во java 2D го имплементира интерфејсот Shape. Ова значи дека сите тие можат да бидат пратени до методите на Graphics2D, draw() и paint().

Java.awt.geom.PathIterator

Значи граница на некој облик од тип Shape е претставена со патека. Патека претставува едноставна серија на инструкции од тип: оди до 0,0 или пак исцртај линија до 65,15. Во java 2D, сегментите од патеката се енкапсулирани во java.awt.geom.PathIterator интерфејсот. Со методот getPathIterator() на класата Shape може да вратиме објект кој ја опишува контурата на обликот. Тука треба да се напомене дека PathIterator е read-only, ја опишува патеката но не дозволува таа да биде променета.
PathIterator интерфејсот дефинира константи кои ги претставуваат петте можни сегментни типови:
public static final int SEG_MOVETO – ја обновува локацијата на патеката (path).
public static final int SEG_LINETO – црта права линија од последната точка на патеката.
public static final int SEG_QUADTO – овој сегментен тип е крива линија од втор ред која е опишана со две крајни точки и една контролна кои ги определуваат тангентите на кривата.
 
слика: криви од втор ред т.е. квадратни криви



слика: крајни точки, контролни точки, тангенти на квадратни криви

public static final int SEG_CUBICTO – овој сегментен тип ги претставува купичните криви, т.е. кривите од трет ред. Во принцип слични се со квадратните криви со таа разлика што кубичните имаат уште една контролна точка.

 
public static final int SEG_CLOSE – црта линија назад кон почетната точка од патеката.

Овде треба да ги спомнеме двата метода на класата PathIterator кои овозможуваат изминување на патеката и тестирање дали е достигнат крајот: public abstract void next() и public abstract boolean isDone().
Кај едноставните облици лесно се определува кој е внатрешен а кој надворешен дел. Меѓутоа кај покомплицираните тоа и не е така едноставно.
public static final int WIND_EVEN_ODD – го определува т.н. winding rule. Ова функционира т.ш цртаме линија преку целиот облик при што при секојпат кога линијата ќе пресече граница од обликот се зголемува бројачот. Кога бројачот е парен линијата е надвор од обликот, во спротивно е внатре.

 
слика: even-odd winding rule

public static final int WIND_NON_ZERO – оваа константа го претставува non-zero winding rule. И оваа правило функционира на принцип на исцртување на линија преку обликот. Овде е важен правецот на работ. При поминување преку раб кој е исцртан од лево кон десно се додава +1 а при преминување на раб исцртан од десно кон лево се одзема -1. Деловите од линијата каде акумулираниот збир е различен од нула се сметаат за внатрешност на обликот.

 
слика: non-zero winding rule

public abstract int getWindingRule() – го враќа winding rule за оваа (this) патека.
страна број: 1 2 3 4 5 6 7 8 9 << претходна страна : : следна страна >> 
 
Коментирај
автор: Анонимус
Анонимните коментари ќе бидат објавувани веднаш после нивната проверка.
За да вашиот коментар биде веднаш валиден претходно пријавете се или креирајте свој профил


пребарување
најди
 
Форум
 
JugMK
GetJava Download Button
http://www.eclipse.org
 
 
 
 
Copyrights © 2006 - 2024 by Java.com.mk
Права и правила за користење на java.com.mk
Контакт адреса:
contact AT java.com.mk
Powered by Supernova v.0.70 beta
JavaTM и Java-базираните ознаки се трговски марки или регистрирани трговски марки на Sun Microsystems, Inc. во САД и други држави. Java.com.mk никако не соработува со Sun Microsystems, Inc.
Сите други трговски марки се сопственост на нивните сопственици.