You are on page 1of 19

4.1 Hin th trong Java2D 4.1.

1 Gii thiu v Java 2D Ngy nay, vi s pht trin nh v bo ca cng ngh thng tin, ha my tnh c s thay i cc k ln. Cc ngn ng lp trnh truyn thng c trc quan ha khin cho vic vit cc ng dng giao din ngi dng (GUI Graphics User Interface) tr nn d dng hn. Java cng khng nm ngoi xu hng ny. Java c cc th vin h tr vit cc ng dng giao din ngi dng gip lp trnh vin c th vit cc ng dng giao din ngi dng nhanh chng v khng c g kh khn na.

Hnh 1: ng dng giao din ngi dng Nh vy, Java c th c dng vit cc ng dng giao din ha (GUI) v nhng ng dng giao din dng lnh (command-line). Cc chng trnh tng tc vi ngi dng hin ny c s dng ch yu l cc ng dng giao din ha. Chnh v vic s dng giao din ha m phin bn Java lp trnh nn cc ng dng giao din ha c gi l Java2D. Java2D s dng cc hm th vin AWT (Abstract Windows Toolkit) thc hin x l ha. Java l ngn ng c vit c th chy trn cc h iu hnh khc nhau, min l h iu hnh ny c ci t my o Java (Java Virtual Machine). Vi u th ny, AWT cng l th vin c vit c th chy trn min mi trng ha ca cc h iu hnh khc nhau. 4.1.2 Gii thiu mt vi i tng ha trong Java2D Khi lp trnh cc ng dng giao din ngi dng ha, cc lp trnh vin s phi quan tm ti cc hm giao tip lp trnh ha (API) ca h iu hnh ang s dng. Chng ta cng u bit, mi h iu hnh u c cc hm ha API khc nhau, cc hm API ca h iu hnh Windows s khc vi cc hm API ca h iu hnh MAC, Linux S pht trin ca cng ngh thng tin ko theo s pht trin ca Internet, ng thi yu cu ca ngi s dng ngy cng kht khe hn i hi cc ng dng cn phi c chy trn cc my khc nhau s dng cc h iu hnh khc nhau. Lp trnh vin vit chng trnh trn mt h iu hnh c nh m khng bit trc c ngi s dng dng chng trnh ca mnh trn h iu hnh no. Java sinh ra cng l gii quyt vn ny mt cc trit . Cc chng trinh c vit bng ngn ng Java c th chy trn cc nn tng h iu hnh khc nhau. Cc hm API ca th vin ha Java c thit k rt tru tng, do lp th vin

ha AWT c th gip chng ta chuyn i d dng t API ca Java sang API ca h iu hnh tng ng mt cch d dng. Khi mun v bt c ci g, chng ta u phi s dng ti i tng Graphics, i tng Graphics nh mt cy bt v v. Bt c khi no chng trnh mun ti to li hnh nh u phi dng ti phng thc paintComponent (vi Java 1.5 tr i), phng thc ci t cho lp ny nh sau: public void paintComponent(Graphics g) { } Vi cc phin bn Java 1.4 tr v trc, phng thc paintComponent cha c s dng, lc Java dng phng thc paint, phng thc ny c ci t nh sau: public void paint (Graphics g) { } v li cc hnh nh, chng ta phi gi l phng thc paint hoc paintComponent, tuy nhin vic s dng hai phng thc trn s khin chng trnh tn nhiu thi gian x l nu b gi lin tc. V do vy phng thc repaint() c s dng thay th trong trng hp ny gip chng trnh x l nhanh hn v lm cho hnh nh mt m hn khin mt ngi khng c cm gic hnh b git, khng t nhin. Sau y, chng ta s i tm hiu mt s i tng ha c bn c s dng cng nh mt s phng thc biu din cc i tng ln trn mn hnh trong Java2D. Th vin AWT cung cp lp Graphics, a ra mt s phng thc v cc hnh c bn: ng thng (Lines), vng trn v elip (Circle v Ellipes), hnh ch nht v a gic (Rectangle v Polygon), hnh nh (Image) v vn bn vi cc font ch (Text v Font). Chng ta u bit, mn hnh my tnh hin nay c phn gii khc nhau nh 800x600, 1024x768, 1920x1080, phn gii ny th hin c ta ln nht c th c c gc tn cng bn phi mn hnh. Ta y c s dng trong h ta -Cc l ta bao gm cc im (x,y) vi trc tung hng xung v gc tri pha trn mn hnh l im c ta (0,0). Ta cc im tng dn v ph phi v t trn xung di.

(0,0)

(1920,0)

Mn hnh

(0,1080)

(1920,1080)

V ng thng l vic lm c bn nht trong ha. v mt ng thng trong Java2D l mt vic cc k n gin: public void drawLine(int x1, int y1, int x2, int y2) Phng thc ny s to ra c mt ng thng t im c v tr (x1, y1) ti im c v tr (x2, y2) trn mn hnh. V d, v ng thng c to bi hai im (0, 0) v (250, 250) ta s dng nh sau: public void paintComponent(Graphics g){ g.drawLine(0, 0, 250, 250); }

Hnh ch nht cng l mt trong cc hnh c bn ca ton hc, hnh ch nht l mt hnh c 4 nh vi 4 gc vung. Hnh vung l trng hp c bit ca hnh ch nht. Trong Java2D c nhiu cch v mt hnh ch nht nhng phng thc c bn nht v hnh ch nht l: public void drawRect(int x, int y, int width, int height) Chng ta mun v mt hnh ch nht, iu u tin cn phi xc nh c l ta ca im gc tri pha trn ca hnh ch nht (x, y) v chiu rng cng nh chiu di ( y c t l height do trc tung hng t trn xung di) ca n. Chng hn, v hnh ch nht ta (20,20) c kch thc 200x200, hnh ch nht ny tr thnh hnh vung, chng ta s dng: public void paintComponent(Graphics g){

g.drawRect(20, 20, 200, 200); }

Hnh trn v hnh elip cng c s dng rng ri trong i sng cng nh trong giao din. Java2D gi chung hai hnh ny l hnh bu dc (Oval) v s dng chung phng thc v hnh trn v hnh elip. Phng thc c bn nht l drawOval: public void drawOval(int x, int y, int width, int height)
x, y

height

width

v mt hnh trn chng ta ch cn t width = height. v mt hnh trn v hnh elip ta dng: public void paintComponent(Graphics g){ g.drawOval(10, 10, 30, 30); g.drawOval( 50, 10, 30, 40); }

Chng ta va tm hiu v cc hnh c bn, cc hnh khi ny c hnh thnh v c xc nh t c s l ta cc im. Th vin AWT ca Java cung cp cho i tng Point, Point l i tng biu din ta im (x,y). to ra mt i tng (mt im) c ta x, y: public void Point(int x, int y) Chng ta cng c th to ra mt im t mt im khc: public void Point(Point p) Nu cha bit c v tr chnh xc ca im, chng ta mun gn ta cho n sau ny, to mt im rng cng thc hin c trong Java: public void Point() Gi s chng ta to ra im c ta (2,10). Trong chng trnh, ta dng lnh: Point p = new Point(2, 20) Sauk hi c im p, chng ta mun thay i hoc ly v tr ca x hoc y, Java cung cp cc thnh phn x, y ca i tng Point gip truy cp d dng hn: p.x ly ra v tr x, p.y ly ra v tr y.

4.2 Tng tc gia chng trnh hin th v Wave Wave khng b hp trong bn thn chng trnh, Wave cn c kh nng tng tc vi cc chng trnh bn ngoi cng nh h iu hnh m Wave ang chy. S tng tc ny c c l do Wave tch hp mt hm c gi l SystemCall, gip Wave thc thi cc chng trnh bn ngoi, y l mt hm rt mnh v c s dng tng i nhiu. Chng trnh Wave c th thc thi cc lnh thng dng ca h iu hnh ang thc thi Wave. Trn h iu hnh Windows, Wave c kh nng gi ton b cc lnh ipconfig, dir, ren V trn Linux cc lnh thng dng cng c gi mt cch d dng: ifconfig, ls, Khng b b hp bi cc lnh h thng sn c, Wave cng c th chy mt ng dng, l cc tp tin chng trnh, ti bt c u trn my. Tnh nng ny c nh gi rt cao v y chnh l cch m Wave tng tc vi cc chng trnh bn ngoi mt cch trc tip. Bn thn chng trnh Wave c vit bng ngn ng Java nn Wave c y cc c tnh ca mt chng trnh Java. Mt trong cc c tnh l Wave c th gi v thc thi mt class (lp) khc c vit bng Java mt cch d dng. Chng trnh hin th ha l mt chng trnh c lp vi Wave. S lin h gia chng trnh hin th v Wave c th hin theo s di y:

Wave

G i Truyn tham s

Chng trnh trung gian

a d liu

Chng trnh hin th

Da vo s trn ta c th nhn thy r gia Wave v chng trnh hin th ha c mt chng trnh con lm trung gian. C cu hot ng ca s nh sau: Ban u, chng trnh hin th s c chy v lng nghe mt cng no , ch cc thng ip c chuyn n. T bc ny, c th thy, chng trnh hin th c th c vit bng bt k ngn ng no trn bt c h iu hnh no v bt k my no. Bc tip theo, chng trnh Wave chy v thc hin cc cng vic m ngi dng a d liu vo, khi cn hin th Wave s gi chng trnh trung gian bng hm SystemCall. Chng trnh trung gian l mt lp (class) c vit bng Java hoc l mt chng trnh c kh nng thc thi. Chng trnh ny s nhn cc tham s c truyn t Wave. Sau chng trnh s x l cc tham s nhn c (nu cn) ri

truyn cho chng trnh hin th qua socket. Khi truyn d liu xong, chng trnh trung gian s kt thc. Chng trnh hin th ang lng nghe th nhn c thng ip t chng trnh trung gian gi ti, thng ip c x l v hin th ln mn hnh tng ng vi d liu truyn vo. Trong khi hin th, chng trnh vn tip tc lng nghe i d liu c tip tc truyn vo.

4.3 To li Trong chng trnh hin th, li c to ra l hnh ch nht hoc hnh vung. Hu ht li c to bi Wave l cc hnh vung, Cc hnh ny c chia nh thnh cc hnh vung nh hn to thnh cc hng v ct. Nh vy, li l tp hp cc hnh vung nh v c th c gi l mt bng gm hng v ct. Hnh bn di minh ha cho ta mt li (5x5 nt hay 5x5 vung, t by gi khi ni to ra mt li 5x5 chng ta ngm hiu l to ra mt li 5x5 nt): 1 1 2 3 4 5

5 Vi mt li c to ra nh hnh v trn, chng ta t ta cho cc nh ca cc hnh vung theo s ca cc nt tng ng vi chiu ngang v chiu dc. Theo nh hnh v trn, ta ca nt u tin s l (1,1) v nt cui cng nm gc di bn phi ca hnh v l (5,5). Trong chng trnh hin th, li s c nm trong mt khung c gi l frame. Khung s c kch thc c t sn v tnh theo pixel. V d khung c kch c 1024x768 l khung c chiu di 1024 pixel v chiu rng l 768 pixel. Di y l mt v d c trong chng trnh hin th khi li c to ra nm trong khung chnh l giao din ca chng trnh hin th:

K thut dng to li trong chng trnh nh sau, khi nhn c thng ip t chng trnh trung gian hoc Wave theo ng nh dng, chng trnh hin th s phn tch v ly ra cc kch thc l s hng v s ct. Da vo s hng v s ct, chng trnh s chia hnh cn biu din thnh cc phn bng nhau chnh l cc vung nh. Tip theo, chng trnh s v ln lt tng vung mt cho ti khi ht tc cho ti khi to thnh c hnh v theo yu cu. Va ri, chng ta va tm hiu k thut to ra mt li trong chng trnh, by gi, chng ta s i n chi tit s dng trong m chng trnh. nh dng ca lnh to ra mt li trong chng trnh l: CREATEGRID(num_x,num_y;root_x,root_y) Trong : CREATEGRID: m lnh to li num_x: s nt theo chiu ngang num_y: s nt theo chiu dc root_x: ta theo chiu ngang ca chng trnh Wave root_y: ta theo chiu dc ca chng trnh Wave

y, ta theo chiu ngang v theo chiu dc ca chng trnh Wave c hiu nh sau: vi Wave hay bt c chng trnh no khc, vic to ra mt li i vi chng trnh hin th trn mn hnh u v ra mt li m khng v ra ch s hay ta ca li. Chng ta u bit nt u tin ca li l (1,1), mc d vy chng trnh mun quy c nt u tin c ta khc i nhng khi hin th vn hin th mt cch bnh thng th khi to li s quy c ta ban u ca li s ng vi ta no ca chng trnh a d liu vo. cho d hiu, chng ta mun to mt li 5x5 vi ta ban u ng vi ta (1,1), cu lnh to li s nh sau:

CREATEGRID(5,5;1,1) Vi cu lnh trn, chng trnh s c giao din nh sau:

Cc im c quy c nh bn di: 1 1 2 3 4 5

5 By gi, chng ta to mt li c ta ban u ng vi ta (6,1), cu lnh to li nh sau: CREATEGRID(5,5;6,1) V cu lnh ny s to ra hnh nh:

Mc d hnh nh hin th l ging nhau gia cu lnh: CREATEGRID(5,5;1,1) v CREATEGRID(5,5;6,1). Tuy nhin CREATEGRID(5,5;6,1) c cc im c quy c ngm nh bn di:

6 1

10

M c vit trong chng trnh to ra mt li rt n gin. Ban u, chng trnh t bin trng thi status. Khi khi to chng trnh, bin ny s c gi tr bng 0. Khi chng trnh hin th nhn c mt thng ip v kim tra xem thng ip c cha lnh iu khin to ra mt li hay khng, nu l lnh to li, chng trnh s phn tch lnh ny tip nhm kim tra cc tham s ca lnh c ph hp v ng vi nh dng ca lnh to li hay khng. on m di c ci t vo trong chng trnh:

int begin = message.indexOf('('); int first_sign = message.indexOf(',', begin); int end = message.indexOf(')'); if (begin == 10) { String cmd = message.substring(0, begin); cmd = cmd.toUpperCase(); System.out.print(cmd + "\n"); try { if (cmd.equalsIgnoreCase("CREATEGRID")) { int second_sign = message.indexOf(';', first_sign + 1); int third_sign = message.indexOf(',', second_sign + 1); String charX = message.substring(begin + 1, first_sign); String charY = message.substring(first_sign + 1, second_sign); String str_root_x = message.substring(second_sign + 1, third_sign); String str_root_y = message.substring(third_sign + 1, end); int int_x = Integer.parseInt(charX); int int_y = Integer.parseInt(charY); int int_root_x = Integer.parseInt(str_root_x); int int_root_y = Integer.parseInt(str_root_y); System.out.println("x = " + charX + ", y = " + charY + ", root_x = " + str_root_x + ", root_y = " + str_root_y); trans_x_grid = int_root_x; trans_y_grid = int_root_y; createGrid(int_x -1 , int_y - 1); return 1;

Sau khi phn tch d liu v ly c ra tham s ph hp vi lnh, chng trnh s gi n hm to li:
private void createGrid(int num_x, int num_y) { x = num_x; y = num_y; status = 1; repaint();

Hm ny, thc cht ch thay i bin status thnh 1 v thit lp di v rng cho li, cn vic hin th li c t trong trong hm paintComponent:

if (status == 1) { int x_grid = translation_x; int y_grid = translation_y; for (int i = 0; i < x; i++) { for (int j = 0; j < y; j++) { g.drawRect(x_grid, y_grid, similar_width, similar_width); x_grid += similar_width; } x_grid = translation_x; y_grid += similar_width; } }

4.4 Di chuyn S di chuyn v tr ca mt nt t v tr ny n v tr khc thc ra ch l cc th tc: xa nt v tr c v to ra mt nt ging ht nt c v tr mi. to ra mt nt mi, cn truyn cho chng trnh hin th mt lnh c nh dng: CREATENODE(x,y,color) xa mt nt, cn truyn cho chng trnh hin th mt lnh c dng: DELETENODE(x,y,color) Trong : CREATENODE: m lnh to nt DELETENODE: m lnh xa nt x: v tr ca nt theo chiu ngang y: v tr ca nt theo chiu dc color: mu ca nt

Mu ca nt c quy c: 0: Black (mu en) 1: White (mu trng) 2: Red (mu ) 3: Blue (mu xanh)

di chuyn mt nt t ta (x1,y1) c mu color n ta (x2,y2), cu lnh di chuyn nh sau: MOVEFROMTO(x1,y1,color;x2,y2) V d, chng ta to ra mt nt c mu ti ta (1,1) v mt nt mu xanh ti ta (3,2):

CREATENODE(1,1,2)

CREATENODE(3,2,3)

Sau , chng ta di chuyn nt mu sang ta (2,2): MOVEFROMTO(1,1,2;2,2)

Chng X: VRML X.1. Gii thiu cng ngh 3D X.1.1. Cng ngh 3D Cc ng dng ha thng thy trn tivi hoc trn my tnh thc ra ch l tp hp ca cc bc nh hai chiu. Cc bc nh ny, ch a ra hnh chiu ca vt th theo mt gc no . theo di c ht vt th, chng ta cn chp li mt s lng ln nh hai chiu. iu ny gy nn s hn ch khc ln ca con ngi vi vt th c quan st. Cng ngh ny c gi l cng ngh 2D. V d, nu bn mun mua mt chic xe p, bn gh thm mt trang web bn xe p v tm chic xe m mnh ng . Tuy nhin, trang web ny ch c th a cho bn cc thng tin v chic xe v mt s hnh nh chp c v n.

Hnh X. 1: Xe p c chp vi nh 2D

Cng ngh 3D ra i to ra mt s bin i to ln gip con ngi c th quan st vt th di dng 3 chiu. Bn c th quan st tng chi tit trn vt th, c th quay mi hng tng t nh ngoi i vy.

Hnh X. 2: nh xe p 3D

X.1.2. Gii thiu v Java 3D Java 3D c pht trin bi Sun Microsystems. Java 3D thc ra l mt giao din lp trnh ng dng cho php lp trnh vin thit k v xy dng cc ng dng 3D. Chng trnh c vit bng Java 3D c th l mt chng trnh ng dng hoc c nhng vo Applet. Cc chng trnh c vit bng Java 3D c th chy trn bt c h iu hnh no c ci t my o Java v cc th vin h tr Java 3D. X.2. Tng quan v VRML X.2.1. Khi nim VRML (Virtual Reality Modeling Language) l ngn ng m hnh ha thc ti o, s dng m hnh phn cp trong vic th hin cc tng tc vi i tng ca m hnh. Phin bn u tin ca VRML l 1.0, n c ra i vo thng 10 nm 1994. Cc file VRML 1.0 phi khai bo ti dng u tin ca file ni dung #VRML V1.0 ascii. Di y l mt file VRML 1.0:

#VRML V1.0 ascii Separator { Separator{ Material { diffuseColor 0 1 1 diffuseColor 0 1 2 diffuseColor 0 1 3 } Sphere { radius 10 } } Transform { rotation 1 100 8 1 rotation 1 100 8 2 rotation 1 100 8 3 } Separator { Transform { translation 0 20 20 } Material { diffuseColor 0 0 1 } Sphere { radius 2 } } }

Sau mt thi gian VRML c ci tin ln phin bn 2.0 vi nhiu u im hn so vi 1.0 vi cc chc nng mnh m v tr thnh mt chun pht trin cho cc ng dng ha. Cc file VRML 2.0 bt buc phi c #VRML V2.0 utf8 ti dng u tin. V d mt mt file VRML 2.0:
#VRML V2.0 utf8 Transform { translation -4 4 0 children Transform { rotation 0 1 1 0 children Shape { appearance Appearance { material Material { diffuseColor } } geometry Cylinder { } } } }

1 0 0

VRML ra i nhm mc ch xy dng ln mt ngn ng internet 3D pht trin ha 3D trn web.

X.2.2. Ngn ng VRML Cc file VRML c phn m *.wrl, *.wgz, *.wrz. Trong wrl l nh dng chun, cn hai nh dng cn li l cc nh dng nn ca VRML. Thc cht cc file VRML ch l cc file vn bn nhng n c sp xp theo mt trt t v quy tc nht nh m t v vt th trong th gii 3D. Mt file VRML c cu to t cc nt c bn. Cc nt c bn ny l cc khi hnh hc c s dng to nn th gii 3D. Cc i tng hnh hc ny bao gm: hnh hp (Box), hnh tr (Cylinder), hnh nn (Cone), hnh cu (Sphere), Ta trong VRML c quy c nh hnh v:
y

Hnh X. 3: Ta trong VRML

Vi VRML 1.0, v mt hnh cu vi bn knh l 10, chng ta ch cn khai bo: Sphere { radius 10 }

Hnh X. 4: Khi cu vi bn knh 10 trong VRML

VRML c cc php bin i l: php quay, php dch chuyn, php t l. Php quay (Rotation): c s dng cho php quay trong khng gian 3 chiu. C php ca php quay: rotation x y z a vi x, y, z tng ng l 3 trc, a l gc quay. Php dch chuyn (Translation): dch chuyn i tng ti v tr bt k trong khng gian. C php ca php dch chuyn: translation x y z - vi x, y , z l cc to theo 3 trc tng ng.

Php t l (Scale): c hiu nh php ng dng, cho php nhn i tng vi cc t l khc nhau. C php ca php t l: scale x y z - trong x, y, z l t l theo 3 trc tng ng. Ba loi bin i trn c s dng bn trong nt Transform. V d:
Transform { translation 1 1 1 rotation 0 1 0 0.78 scale 2 1 2 }

You might also like