锘??xml version="1.0" encoding="utf-8" standalone="yes"?>性8sex亚洲区入口,国产精品免费在线,国产日韩在线看http://m.shnenglu.com/SoRoMan/浜鴻嫢鏃犲悕,渚垮彲涓撳績緇冨墤.zh-cnWed, 24 Sep 2025 02:29:36 GMTWed, 24 Sep 2025 02:29:36 GMT60Blog縐誨埌鏂板湴鍧http://www.cnblogs.com/soromanhttp://m.shnenglu.com/SoRoMan/archive/2006/09/20/12758.htmlSoRoManSoRoManWed, 20 Sep 2006 06:55:00 GMThttp://m.shnenglu.com/SoRoMan/archive/2006/09/20/12758.htmlhttp://m.shnenglu.com/SoRoMan/comments/12758.htmlhttp://m.shnenglu.com/SoRoMan/archive/2006/09/20/12758.html#Feedback0http://m.shnenglu.com/SoRoMan/comments/commentRss/12758.htmlhttp://m.shnenglu.com/SoRoMan/services/trackbacks/12758.htmlhttp://www.cnblogs.com/soroman

SoRoMan 2006-09-20 14:55 鍙戣〃璇勮
]]>
鎺㈣錛氱墿浣撶粫浠繪剰鍚戦噺鐨勬棆杞?鍥涘厓鏁版硶VS.鏃嬭漿鐭╅樀娉曠殑鎬ц兘姣旇緝http://m.shnenglu.com/SoRoMan/archive/2006/09/19/12717.htmlSoRoManSoRoManTue, 19 Sep 2006 09:11:00 GMThttp://m.shnenglu.com/SoRoMan/archive/2006/09/19/12717.htmlhttp://m.shnenglu.com/SoRoMan/comments/12717.htmlhttp://m.shnenglu.com/SoRoMan/archive/2006/09/19/12717.html#Feedback0http://m.shnenglu.com/SoRoMan/comments/commentRss/12717.htmlhttp://m.shnenglu.com/SoRoMan/services/trackbacks/12717.html3D絀洪棿涓殑鏃嬭漿鍙敤鏃嬭漿鐭╅樀銆佹鎷夎鎴栧洓鍏冩暟絳夊艦寮忔潵琛ㄧず錛屼粬浠笉榪囬兘鏄暟瀛﹀伐鍏鳳紝鍏朵腑鍦ㄧ粫浠繪剰鍚戦噺鐨勬棆杞柟闈紝鏃嬭漿鐭╅樀鍜屽洓鍏冩暟涓ょ宸ュ叿鐢ㄧ殑杈冨錛屾鎷夎鐢變簬瀛樺湪涓囧悜鑺傛閿佺瓑闂錛屼嬌鐢ㄥ瓨鍦ㄩ檺鍒躲?br />
錛堟湰鏂囧亣璁懼潗鏍囩郴涓哄乏鎵嬪潗鏍囩郴涓紝鏃嬭漿鏂瑰悜涓洪『鏃墮拡銆傦級

鎵姹傞棶棰橈細

緇欏畾浠繪剰鍗曚綅杞磓(鍚戦噺),姹傚悜閲弍(x,y,z)(鎴栫偣p)楗秖鏃嬭漿theta瑙掑害鐨勫彉鎹㈠悗鐨勬柊鍚戦噺p'(鎴栫偣p')錛?/strong>

1.鐢ㄥ洓鍏冩暟宸ュ叿錛?br />-------------------------------------------------------------------------
緇撹錛氭瀯閫犲洓鍏冩暟鍙樻崲p'= q*p*q-1錛岋紙p,q鏄敱鍚戦噺p,q鎵╁睍鎴愮殑鍥涘厓鏁幫級銆傞偅涔堬紝p'杞崲鑷沖搴旂殑鍚戦噺(鎴栫偣)灝辨槸鍙樻崲鍚庣殑鏂板悜閲弍'(鎴栫偣p')銆?/p>

鍏朵腑錛宲',q,p,q-1鍧囦負鍥涘厓鏁般俼鐢卞悜閲弎鎵╁睍,涓簈=(cos(theta/2),sin(theta/2)*q)錛宲鐢卞悜閲弍鎵╁睍,涓簆=(0,x,y,z),q-1涓簈鐨勯嗭紝鍥犱負q涓哄崟浣嶅洓鍏冩暟錛屾墍浠-1=q*=(cos(theta/2),-sin(theta/2)*q)銆?br />-------------------------------------------------------------------------

錛堣繖涓粨璁虹殑璇佹槑榪囩▼鍙互鍦ㄧ綉涓婃壘鍒般傝繖閲岀暐鍘匯傦級
涓嬮潰鐪嬪叾鏃墮棿澶嶆潅搴︼細

棣栧厛鏈変釜涓夎鍑芥暟鐨勮綆楁椂闂達紝榪欎釜鍙互棰勫厛璁$畻濂斤紝鑺辮垂鏃墮棿涓嶈銆傝冭檻n涓洓鍏冩暟鐩鎬箻闇榪涜4*4*(n-1)=16*(n-1)嬈′箻娉曪紝15*(n-1)嬈″姞娉曪紝鍥犱負鍔犳硶鍖栬垂鏃墮棿杈冨皯錛岃繖閲屼粎鑰冭檻涔樻硶銆傝繖閲屾秹鍙婂埌涓変釜鍥涘厓鏁扮殑涔樻硶錛岃涓嬈′箻娉曠殑鏃墮棿涓篢,鏁呰姳璐?6*2=32T

2.鏃嬭漿鐭╅樀宸ュ叿錛?/strong>
-------------------------------------------------------------------------
緇撹錛氭瀯閫犳棆杞煩闃靛彉鎹rot,鍒欏彉鎹㈠悗鐨勬柊鍚戦噺p'(鎴栫偣p')涓簆'= p*Trot

鍏朵腑錛宲'錛坸',y',z',1錛?p(x,y,z,1)涓哄悜閲弍'錛宲鐨?D榻愭鍧愭爣琛ㄧず錛孴rot =

|t*x*x + c,聽聽聽聽聽聽聽t*x*y + s*z,聽聽聽聽聽聽t*x*z - s*y,聽聽聽聽 0|
|t*x*y - s*z,聽聽聽聽t*y*y + c,聽聽聽聽聽聽聽聽聽聽t*y*z + s*x,聽聽聽聽0|
|t*x*z + s*y,聽聽 t*y*z - s*x,聽聽聽聽聽聽聽t*z*z + c,聽聽聽聽聽聽聽聽0|
|0,聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽0,聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽0,聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽1|聽聽聽

c=cos(theta), s=sin(theta),t=1-c.
-------------------------------------------------------------------------
錛堣繖涓粨璁虹殑璇佹槑榪囩▼鍙互鍦ㄧ綉涓婃壘鍒般傝繖閲岀暐鍘匯傦級

涓嬮潰鐪嬪叾鏃墮棿澶嶆潅搴︼細

涓夎鍑芥暟鐨勮綆楁椂闂翠笉璁°傜煩闃墊湰韜殑鍏冪礌涔樻硶涓昏鏄綆梩*x鍜宻*x涔嬬被錛岄渶榪涜12+3=15嬈′箻娉曘備袱涓煩闃電浉涔樼殑闇榪涜n*n*n嬈′箻娉?榪欓噷n=4錛屾墍浠ヨ姳璐?*4*4=64嬈′箻娉曟椂闂?浣嗚繖閲屾湁涓敞鎰忕殑鍦版柟灝辨槸鏃嬭漿鐭╅樀鐨勭4緇存棤欏昏冭檻錛屽嵆鍙畝鍖栦負3X3鐨勭煩闃點傛晠鑺辮垂3*3*3=27嬈′箻娉曟椂闂達紝鎬誨叡鐨勬椂闂翠負15+27=42嬈′箻娉曟椂闂淬俢ost=42T.

姣旇緝鏉ョ湅錛岃繕鏄嬌鐢ㄥ洓鍏冩暟鐨勬晥鐜囪楂樺嚭涓浜涳紝榪欏湪瑕佸彉鎹㈢殑鐐圭殑鏁扮洰瓚婂ぇ鏃訛紝浣撶幇鐨勮秺鏄庢樉銆傚疄闄呬笂錛屾湁寰堝3D寮曟搸涓轟簡鍒╃敤鍥涘厓鏁拌繍綆楃殑楂樻晥鐜囨э紝涓鑸厛灝嗙煩闃佃漿鎹㈡垚鍥涘厓鏁板悗榪涜榪愮畻鍐嶈漿鍥炰負鐭╅樀鍚庯紝鍐嶄紶緇橠irectX鎴朞penGL搴撳嚱鏁般?br />
鍏充簬鍥涘厓鏁板拰鐭╅樀鍦ㄥ悜閲忥紙鏂瑰悜錛変箣闂寸殑榪涜鎻掑肩殑鏁堢巼姣旇緝錛岃涓嬬瘒錛?br />鎺㈣錛氱墿浣撶粫浠繪剰鍚戦噺鐨勬棆杞?鍥涘厓鏁版硶VS.鏃嬭漿鐭╅樀娉曠殑鎬ц兘姣旇緝



SoRoMan 2006-09-19 17:11 鍙戣〃璇勮
]]>
鎺㈣:3D閫忚鎶曞獎鍙樻崲璇﹁В-鍏艱皥瑙嗗鉤闈㈠拰灞忓箷鐨勫楂樻瘮闂http://m.shnenglu.com/SoRoMan/archive/2006/09/17/12566.htmlSoRoManSoRoManSat, 16 Sep 2006 16:34:00 GMThttp://m.shnenglu.com/SoRoMan/archive/2006/09/17/12566.htmlhttp://m.shnenglu.com/SoRoMan/comments/12566.htmlhttp://m.shnenglu.com/SoRoMan/archive/2006/09/17/12566.html#Feedback4http://m.shnenglu.com/SoRoMan/comments/commentRss/12566.htmlhttp://m.shnenglu.com/SoRoMan/services/trackbacks/12566.html鎰熻寰堝涔︿笂閮芥病璁叉竻妤氶忚鎶曞獎鍙樻崲鐨勬帹瀵艱繃紼?鑷繁鎺ㄥ浜嗕笅,浠ュ墠涓鐩村惈緋婄殑鍏充簬鏂瑰艦/闈炴柟褰㈢殑瑙嗗鉤闈㈠拰灞忓箷鐨勫楂樻瘮鐨勯棶棰樹篃鏈変簡絳旀.鏈枃緇勭粐濡備笅錛?br />
1.鐩告満絀洪棿鍒拌騫抽潰鐨勫彉鎹?br />2.瑙嗗鉤闈㈠埌灞忓箷鐨勫彉鎹?br />3.緇煎悎
4.涓鑸儏褰?br />

1.鐩告満絀洪棿鍒拌騫抽潰鐨勫彉鎹?/font>


聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 * p (xc,0, zc)
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 聽/ |
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 聽/聽 |
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 聽/聽聽 |
聽聽聽聽聽聽聽聽聽聽 X聽聽聽 |/聽聽聽聽 |
聽聽聽聽聽聽聽聽聽聽 ^聽聽聽聽 *p' |(xp,0,zp)
聽聽聽聽聽聽聽聽聽聽 |聽聽 / |聽聽聽聽聽 |
聽聽聽聽聽聽聽聽聽聽 |聽 /聽 |聽聽聽聽 聽|
聽聽聽聽聽聽聽聽聽聽 | /聽聽 |聽聽聽聽 聽|
C(cam)聽|/聽聽聽 |聽聽聽聽 聽|
--------*----|----*------------->Z
聽聽聽聽聽聽聽聽聽聽 0聽聽聽 dx聽聽 zc
聽聽聽聽 (X-Z騫抽潰鐨勬姇褰辯ず鍥?

a.閫忚鎶曞獎涓鑸殑瑙嗘櫙浣撲負媯卞彴錛岀浉鏈虹┖闂寸殑鐗╀綋浼氭姇褰卞埌瑙嗗鉤闈=d錛岃繖閲岃冭檻宸︽墜鍧愭爣緋伙紝鐭╅樀浣跨敤琛屼紭鍏堟柟寮忋傚鍥炬墍紺猴紝鐢辯浉浼間笁瑙掑艦鐭ヨ瘑鍙煡鐩告満絀洪棿涓殑鐗╀綋鎶曞獎鍒拌騫抽潰涓婄殑鍧愭爣涓猴細

xp = xc*(dx/zc)
yp = yc*(dy/zc)

鍏朵腑,xc,yc,zc涓虹浉鏈虹┖闂村潗鏍?xp,yp,zp涓鴻騫抽潰鍧愭爣錛宒x錛宒y涓簒,y杞村悜鐨勮璺漹iew distance錛岃騫抽潰鍒癱amera鐨勮窛紱?
鏁呯浉鏈虹┖闂存姇褰卞埌瑙嗗鉤闈笂鐨勭煩闃礣cp涓猴細

|dx 0聽 0 0聽 |

|0聽 dy 0 0聽 |

|0聽 0聽聽 1 1聽 |

|0聽 0聽聽 0 0聽 |

(楠岃瘉:Tcp鍙充箻鐐筽(xc,yc,zc,1)寰楃偣p'(xc*dx, yc*dy, zc, zc),杞崲涓?D鍧愭爣涓?xc*dx/zc, yc*dy/zc, 1),姝g‘銆?

********************************************************************
娉細鍥犱負杞崲榪囩▼涓偣浣跨敤鐨勬槸4D榻愭鍧愭爣,鎵浠ユ渶鍚庨渶杞崲涓?D鍧愭爣銆?D榻愭鍧愭爣(x,y,z,w)杞崲涓?D鍧愭爣鐨勬柟娉曚負闄や互w鍒嗛噺錛屽嵆瀵瑰簲3D鍧愭爣涓?x/w,y/w,z/w)銆?br />********************************************************************


鑰冭檻dx/zc鍜宒y/zc欏癸紝濡傛灉dx != dy,鍒欐姇褰卞悗x,y鐨勬瘮渚嬩細鍙戠敓鍙樺寲錛堝師鍥狅細鎶曞獎鍓嶅潗鏍囨瘮渚嬩負xc/yc,鎶曞獎鍚庝負xp/yp = xc*(dx/zc)/yc*(dy/zc) = xc*dx/yc*dy錛夛紝浠庤屾姇褰卞悗鐨勫浘鍍忕殑x,y姣斾緥浼氬彂鐢熷彉褰€?br />
---------------------------------------------
緇撹1錛氭墍浠ワ紝涓鑸兘浼氫護d=dx=dy,鍗硏,y鍚戠殑瑙嗚窛鐩稿悓銆傚惁鍒欙紝鍥懼儚澶辯湡銆?br />---------------------------------------------

鑰冭檻瑙嗚錛坴iew angle,鎴栬閲巉iled of view錛夌殑闂錛岃瑙掔殑澶у皬涓嶄細褰卞搷鍒扮墿浣撴姇褰卞悗鐨勫潗鏍囷紝鍙細褰卞搷鍙鐨勮寖鍥淬?/p>

鍦ㄨ璺濅竴鏍風殑鎯呭喌涓嬶紝x,y杞寸殑瑙嗚鍙互涓嶄竴鏍楓傚鏋滀竴鏍鳳紝閭d箞瑙嗗鉤闈㈠氨鏄竴涓鏂瑰艦鐨勩備簬鏄湁錛?/p>

tan(theta_x/2) = width_p/d
tan(theta_y/2) = height_p/d聽

鍏朵腑錛宼heta_x錛宼heta_y涓簒,y杞村悜鐨勮瑙掞紝width_p錛宧eight_p涓鴻騫抽潰z=d鐨勫搴︼紙x杞達級鍜岄珮搴?y杞?銆?br />----------------------------------------------------------------
緇撹2錛氳騫抽潰鐨勫楂樻瘮rp=width_p/height_p = tan(theta_x/2)/tan(theta_y/2)銆?br />----------------------------------------------------------------

2.瑙嗗鉤闈㈠埌灞忓箷鐨勫彉鎹?/font>

涓嬮潰灝辨槸瑙嗗鉤闈㈠埌灞忓箷鐨勫彉鎹簡錛岃繖鏄竴涓?D鍒?D鐨勫彉鎹紙瑙嗗鉤闈㈢殑鍧愭爣闇浼哥緝浠ュ~婊℃暣涓睆騫曠┖闂?鍗沖湪瑙嗗鉤闈腑鍑虹幇鐨勬墍鏈夌殑鐐硅鍙樻崲鍒板睆騫曚笂鍘伙紝鍚屾椂x,y杞村悜鐨勬瘮渚嬭繕瑕佺淮鎸佸拰鍙樻崲鍓嶄竴鏍鳳紝浠ュ厤姣斾緥澶辯湡錛屽悓鏃惰騫抽潰鐨勫潗鏍囧師鐐瑰拰灞忓箷涓績鐐癸紙x0=(width_s)/2, y0=(height_s)/2錛夊搴旓級錛屽叾瀹烇紝灝辨槸涓涓潗鏍囩緝鏀懼姞騫崇Щ鐨勮繃紼?

xs = xp*kx + x0
ys = -yp*ky + y0

鐭╅樀Tps涓猴細

|kx聽聽聽聽 0聽聽聽聽聽聽0 0聽 |

|0聽聽聽聽聽 -ky聽聽聽聽0 0聽 |

|0聽聽聽聽聽 0聽聽聽聽聽聽 1 0聽 |

|x0聽聽 y0聽聽聽聽聽聽0 1聽 |

(楠岃瘉:Tps鍙充箻鐐筽(xp,yp,zp,1)寰楃偣p'(xp*kx + x0, -yp*ky + y0, zp, 1),杞崲涓?D鍧愭爣涓?xp*kx + x0, -yp*ky + y0, zp)錛屾紜?

鍏朵腑錛宬x,ky(kx>0,ky>0)涓簒,y杞村悜鐨勭緝鏀懼洜瀛愶紙kx=(width_s)/(width_p)錛?ky = (height_s)/(height_p錛夛紝鍜岃璺濈浉鍚岋紝kx,ky鐨勫煎繀欏諱竴鏍鳳紝鍚﹀垯鍥懼儚鐨剎,y姣斾緥鍙堜細鍙戠敓鍙樺艦銆傝繖閲?yp*ky鏄洜涓轟竴鑸睆騫曠殑y杞存槸鍚戜笅鐨勶紝璺熺浉鏈虹┖闂村拰瑙嗗鉤闈㈠潗鏍囩郴涓殑y杞存柟鍚戠浉鍙嶃?br />------------------------------------------------------------------------------------------------
緇撹3: 涓鑸護k=kx=ky錛屽嵆x,y鍚戠殑緙╂斁鍥犲瓙鐩稿悓銆傚惁鍒欙紝鍥懼儚澶辯湡銆?br />浜庢槸鏈夛紝width_s/width_p = height_s/height_p錛屽彉鍖栫瓑寮忓緱錛宺p = width_p/height_p = width_s/height_s = rs
鎵浠ワ紝鍦▁,y杞磋璺濅竴鏍風殑鎯呭喌涓嬶紝瑕佹兂鏈鍚庡彉鎹㈠埌灞忓箷涓婄殑鍥懼儚x,y姣斾緥涓嶅け鐪燂紝蹇呴』rp=rs,鍗寵騫抽潰鐨勫楂樻瘮鍜屽睆騫曠殑瀹介珮姣斾竴鏍楓?/strong>
-----------------------------------------------------------------------------------------------

********************************************************************
娉細鑻ュ睆騫曞楂樹負W,H錛屽綋W != H錛屽嵆灞忓箷涓嶄負鏂瑰艦鐨勬椂鍊欙紝瑕佺‘淇濇姇褰卞埌灞忓箷涓婄殑鍥懼儚x,y姣斾緥涓嶅け鐪燂紝鍒檟,y杞磋瑙?鎴栬閲嶧OV)鑲畾涓嶈兘鐩哥瓑銆?
鍘熷洜錛?鐢辯粨璁?,3鐭ワ紝rp=width_p/height_p = tan(theta_x/2)/tan(theta_y/2)=width_s/height_s=rs=W/H銆?鏁呯敱W/H != 1 => theta_x != theta_Y.
********************************************************************

3.緇煎悎錛?/font>

鐩告満絀洪棿鐐筽杞崲鍒板睆騫曠┖闂寸偣p'錛屽彉鎹㈠叕寮忎負錛?/p>

xs = xc*(dx/zc)*kx + x0 = xc*(d/zc)*k + x0
ys = -yc*(dy/zc)*ky + y0 = -yc*(d/zc)*k + y0

緇煎悎鍙樻崲鐭╅樀(鐩告満絀洪棿鍒板睆騫曠┖闂?Tcs涓猴細

Tcs = Tcp*Tps =

|d*k聽聽聽 0聽聽聽聽聽聽 0 0聽 |

|0聽聽聽聽聽 -d*k聽聽聽 0 0聽 |

|x0聽聽聽聽 y0聽聽聽聽聽 1 1聽 |

|0聽聽聽聽聽 0聽聽聽聽聽聽聽聽 0聽 0|

聽鍏朵腑錛宒涓鴻璺濓紝k涓哄睆騫曞楂樻瘮鎴栬騫抽潰瀹介珮姣旓紝x0,y0涓哄睆騫曚腑蹇冿紝娉細鏈鍚庨渶杞崲涓?D鍧愭爣銆?/p>

(楠岃瘉:Tcs鍙充箻鐐筽(xc,yc,zc,1)寰楃偣p'(xc*d*k + x0*zc, -yc*d*k + y0*zc, zc, zc),杞崲涓?D鍧愭爣涓?xc*(d/zc)*k + x0, -yc*(d/zc)*k + y0, 1)錛屾紜?

4.涓鑸儏褰細
聽************************************
瑙嗚窛涓?錛寈杞磋瑙掍負90搴︼紝灞忓箷瀹介珮涓篧,H.
************************************

浠e叆d=1錛宼heta_x = PI/2,x0= W/2,y0=H/2,鍒欒騫抽潰瀹介珮涓簑idth_p = 2銆?br />瑕佺‘淇濆睆騫曚笂鐨勫浘鍍弜,y姣斾緥涓嶅け鐪燂紝鍗硆s=rp,鏈?br />height_p = 2/rp=2/rs=2H/W,
k=kx=ky=width_s/width_p = W/2.

浜庢槸,鐭╅樀涓?

Tcs1 =聽

|W/2聽聽聽 0聽聽聽聽聽聽 0 0聽 |

|0聽聽聽聽聽 -W/2聽聽聽 0 0聽 |

|W/2聽聽聽 H/2聽聽 1 1聽 |

|0聽聽聽聽聽 0聽聽聽聽聽聽聽聽 0 0聽 |

鎴?br />
聽聽 |W/2聽聽聽 0聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 0 0聽 |

|0聽聽聽聽聽 -H/2*(W/H)聽聽聽 0 0聽 |

|W/2聽聽聽 H/2聽聽聽聽聽聽聽聽聽聽聽聽聽 1 1聽 |

|0聽聽聽聽聽 0聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 聽0 0聽 |

(鍙互鐪嬪埌錛寉杞寸殑緙╂斁鍥犲瓙涓箻涓婁簡瀹介珮姣?aspect ratio))
聽榪欎釜鐭╅樀杈冨父鐢ㄣ?br />
---------------------
鏈変粈涔堥棶棰?嬈㈣繋鎺㈣.



SoRoMan 2006-09-17 00:34 鍙戣〃璇勮
]]>
鎬濊冿細鍏充簬The Tower of Babylonhttp://m.shnenglu.com/SoRoMan/archive/2006/08/09/11053.htmlSoRoManSoRoManWed, 09 Aug 2006 09:32:00 GMThttp://m.shnenglu.com/SoRoMan/archive/2006/08/09/11053.htmlhttp://m.shnenglu.com/SoRoMan/comments/11053.htmlhttp://m.shnenglu.com/SoRoMan/archive/2006/08/09/11053.html#Feedback2http://m.shnenglu.com/SoRoMan/comments/commentRss/11053.htmlhttp://m.shnenglu.com/SoRoMan/services/trackbacks/11053.html浠婂ぉ鐪嬪埌涓涓綉鍙嬪湪璋堣涓涓叧浜嶵he Tower of Babylon鐨? 瑙?a href="/sicheng/archive/2006/08/09/11024.html">http://m.shnenglu.com/sicheng/archive/2006/08/09/11024.html錛屾劅瑙夊叾瀹炲氨鏄釜鎸夊叧閿瓧闈㈢Н鎻掑叆鎺掑簭鐨勯棶棰樸備簬鏄敤鎻掑叆鎺掑簭綆楁硶瀹炵幇濡備笅銆?br />
綆鍗曟祴璇曚簡涓嬶紝搴旇娌¢棶棰樸?br />We have 4 kinds of blocks, they are:
(1,1,1)
(1,2,3)
(2,3,4)
(2,3,2)
Building the tower of babylon...
The max height of tower is: 18.
Totally 7 blocks are used, they are:
(1) block (1,1,1), area = 1
(2) block (1,2,3), area = 2
(3) block (1,2,3), area = 3
(4) block (2,3,2), area = 4
(5) block (2,3,4), area = 6
(6) block (2,3,4), area = 8
(7) block (2,3,4), area = 12

------------------------------------
TowerOfBabylon.cpp:
------------------------------------
//
// File: [TowerOfBabylon.cpp]
// Description:[This program illustrates how to get the Tower Of Babylon. the Tower Of Babylon: Given N kinds of blocks,
// you need to buid the tower under the condition that every upper block's area should less than the lower one.]
// Author:[SoRoMan]
// Date:[2006-08-08]
// Version:[2.0]
// History: [1.0: initial draft.
// 2.0: add a new type TOWER
// 3.0: chnage the sequence data structure to list structure to avoid memory access violation.]
//

// INCLUDES //////////////////////////////////////////////////////////////////////////
#include "stdio.h"
#include "malloc.h"

// DEFINES //////////////////////////////////////////////////////////////////////////
#define N 4

// TYPES //////////////////////////////////////////////////////////////////////////
typedef struct BLOCK_TYP
{
聽int x,y,z;
聽int area;
聽int height;

聽BLOCK_TYP *pNext;
} BLOCK, *BLOCK_PTR;

typedef struct TOWER_TYP
{
聽int height;
聽int num_block;

聽BLOCK_PTR pTowerTop;
} TOWER, *TOWER_PTR;

// PROTOTYPES //////////////////////////////////////////////////////////////////////////
TOWER_PTR BuildTower(BLOCK_PTR pBlock, int n);

// FUNCTIONS //////////////////////////////////////////////////////////////////////////
int main(int argc, wchar_t* argv[])
{
聽BLOCK blocks[N] = {{1,1,1},{2,2,2},{3,3,3},{4,4,4}};

聽printf("We have %d kinds of blocks, they are:\n", N);
聽int i;
聽for(i = 0; i < N; i++)
聽{
聽 printf("(%d,%d,%d)\n", blocks[i].x, blocks[i].y, blocks[i].z);
聽}
聽printf("Building the tower of babylon...\n");

聽TOWER_PTR pT = BuildTower(blocks, N);
聽printf("The max height of tower is: %d.\nTotally %d blocks are used, they are:\n", pT->height, pT->num_block );

聽BLOCK_PTR pBlock = pT->pTowerTop;
聽for(i = 0; i < pT->num_block; i++)
聽{
聽聽聽聽聽聽聽 printf("(%d) block (%d,%d,%d), area = %d, height = %d\n", i+1, pBlock->x, pBlock->y, pBlock->z, pBlock->area, pBlock->height);聽
聽聽pBlock = pBlock->pNext;
聽}

聽getchar();

聽return 0;
}

////////////////////////////////////////////////////////////////////////////////
// Algorithm of building the Tower Of Babylon.
// Input Parameters: pBlock: pointer variable that identifies blocks sequence.
// n: int variable that identifies how many kinds of blocks.
// Output Parameters: None.
// Return: pointer variable that identifies the built tower.
////////////////////////////////////////////////////////////////////////////////
TOWER_PTR BuildTower(BLOCK_PTR pBlock, int n)
{
聽int index_block = 0;
聽TOWER_PTR pTower = new TOWER();
聽BLOCK_PTR pTop = new BLOCK();聽
聽pTower->pTowerTop = pTop;

聽// initialize tower
聽pTower->pTowerTop->x = pBlock->x;
聽pTower->pTowerTop->y = pBlock->y;
聽pTower->pTowerTop->z = pBlock->z;

聽pTower->pTowerTop->area = (pBlock->x)*(pBlock->y);
聽pTower->pTowerTop->height = pBlock->z;
聽pTower->height = pTower->pTowerTop->height;
聽pTower->num_block = 1;
聽聽聽
聽for(int i = 1; i < 3*n; i++)
聽{
聽 index_block = i/3;
聽 if (i%3 == 0) // condition 1, area = x*y, height = z.
聽 {
聽聽 (pBlock+index_block)->area = ((pBlock+index_block)->x)*((pBlock+index_block)->y);
聽聽 (pBlock+index_block)->height = (pBlock+index_block)->z;
聽 }
聽 else if (i%3 == 1) // condition 2, area = x*z, height = y.
聽 {
聽聽 (pBlock+index_block)->area = ((pBlock+index_block)->x)*((pBlock+index_block)->z);
聽聽 (pBlock+index_block)->height = (pBlock+index_block)->y;
聽 }
聽 else // condition 3, area = y*z, height = z.
聽 {
聽聽 (pBlock+index_block)->area = ((pBlock+index_block)->y)*((pBlock+index_block)->z);
聽聽 (pBlock+index_block)->height = (pBlock+index_block)->x;
聽 }

聽 bool bNeedToBeAdded = true;聽

聽 BLOCK_PTR pB = pTower->pTowerTop;
聽 BLOCK_PTR pPrev = pTower->pTowerTop;
聽 while(pB != NULL)
聽 {
聽聽 if ((pBlock+index_block)->area < (pB->area))
聽聽 {
聽// insert new block
聽BLOCK_PTR pNewBlock = new BLOCK();聽
聽聽聽 *pNewBlock = *(pBlock+index_block);

聽if(pB == pPrev)
聽{
聽聽pNewBlock->pNext = pB;
聽聽pTower->pTowerTop = pNewBlock;
聽}
聽else
聽{
聽聽pNewBlock->pNext = pPrev->pNext;
聽聽pPrev->pNext = pNewBlock;
聽}

聽聽聽 // increase number of blocks
聽聽聽 pTower->num_block++;
聽聽聽 // increase height of tower
聽聽聽 pTower->height += (pBlock+index_block)->height;
聽聽聽
聽聽聽 bNeedToBeAdded = false;
聽聽聽 break;
聽聽 }
聽聽 else if ((pBlock+index_block)->area == (pB->area))
聽聽 {
聽聽聽 if (pB->height < ((pBlock+index_block)->height))
聽聽聽 {
聽聽聽聽 // increase height of tower
聽聽聽聽 pTower->height += (pBlock+index_block)->height - pB->height;
聽聽聽聽 // replace blocks
聽 BLOCK_PTR pNewBlock = new BLOCK();聽
聽 *pNewBlock = *(pBlock+index_block);

聽 if (pB == pPrev)
聽 {
聽聽pNewBlock->pNext = pB->pNext;
聽聽pTower->pTowerTop = pNewBlock;
聽 }
聽 else
聽 {
聽聽 pNewBlock->pNext = pB->pNext;
聽聽 pPrev->pNext = pNewBlock;
聽 }
聽聽聽 }

聽聽聽 bNeedToBeAdded = false;
聽聽聽 break;
聽聽 }

聽聽 pPrev = pB;
聽聽 pB = pB->pNext;
聽 }

聽 if(bNeedToBeAdded)
聽 {
聽聽 // add new block at the end
聽聽 BLOCK_PTR pNewBlock = new BLOCK();聽
聽聽 *pNewBlock = *(pBlock+index_block);
聽聽
聽聽 pPrev->pNext = pNewBlock;
聽聽 pNewBlock->pNext = NULL;

聽聽 // increase number of blocks
聽聽 pTower->num_block++;
聽聽 // increase height of tower
聽聽 pTower->height += (pBlock+index_block)->height;
聽 }
聽}

聽return pTower;
}



SoRoMan 2006-08-09 17:32 鍙戣〃璇勮
]]>
絎旇錛氬熀錛屽悜閲忓弶縐笌宸﹀彸鍧愭爣緋葷殑鍏崇郴http://m.shnenglu.com/SoRoMan/archive/2006/08/08/10978.htmlSoRoManSoRoManTue, 08 Aug 2006 04:53:00 GMThttp://m.shnenglu.com/SoRoMan/archive/2006/08/08/10978.htmlhttp://m.shnenglu.com/SoRoMan/comments/10978.htmlhttp://m.shnenglu.com/SoRoMan/archive/2006/08/08/10978.html#Feedback0http://m.shnenglu.com/SoRoMan/comments/commentRss/10978.htmlhttp://m.shnenglu.com/SoRoMan/services/trackbacks/10978.html鏈枃鍙槸璇昏呯殑涓浜涘叧浜庡乏鍙沖潗鏍囩郴鐨勬帰璁紝鏈夊緟緇х畫鎸栨帢銆?br />鍙傝冭祫鏂欙細Real-Time Rendering second edtion

涓鑸乏鍙沖潗鏍囩郴鐨勫畾涔夋槸榪欐牱璇寸殑錛?/strong>
鍦ㄥ乏鎵嬪潗鏍囩郴涓紝鍧愭爣杞寸殑瀹氫箟絎﹀悎宸︽墜娉曞垯錛氬乏鎵嬪洓涓墜鎸囩殑鏃嬭漿鏂瑰悜浠嶺杞村埌Y杞達紝澶ф媷鎸囩殑鎸囧悜灝辨槸Z杞淬備絾鏄病鏈夌粰鍑烘暟瀛︿笂鐨勫畾涔夈傚弬鑰冧竴浜涜祫鏂?鍏充簬宸﹀彸鍧愭爣緋葷殑瀹氫箟錛屾秹鍙婂埌鍚戦噺鍙夌Н涓庡乏鍙沖潗鏍囩郴鐨勫叧緋匯?br />
浠庡熀璇磋搗錛?/strong>
鍩烘槸n緇寸殑嬈у紡絀洪棿涓殑涓緇勭嚎鎬ф棤鍏崇殑鍚戦噺V0,V1,...,Vn-1銆傚叧浜庣嚎鎬ф棤鍏沖悜閲忕粍鐨勫畾涔夊彲浠ュ幓鍙傝冨叾浠栬祫鏂欍?br />
鍩轟笌鍧愭爣緋葷殑鍏崇郴錛?br />
濡傛灉涓涓熀鐨勮鍒楀紡涓烘錛岄偅涔堝畠?yōu)鍙互迮炴垚涓涓彸鎵嬪潗鏍囩郴銆傚鏋滀負璐熷垯褰㈡垚宸︽墜鍧愭爣緋匯?br />
鍚戦噺鍙夌Н涓庝笁緇村乏鍙沖潗鏍囩郴鐨勫叧緋伙細
閭d箞鍚戦噺鍙夌Н涓庡乏鍙沖潗鏍囩郴鐨勫叧緋繪湁浠涔堝叧緋誨憿錛熺敱鍩轟笌鍧愭爣緋葷殑鍏崇郴鍙互鎺ㄧ煡錛屾瘮濡傚湪涓夌淮嬈у紡絀洪棿涓紝璁炬湁涓涓熀錛堝悜閲忕粍錛?Vx,Vy,Vz)瀛樺湪錛岄偅涔堟垜浠煡閬撹鍒楀紡鐨勮〃杈懼紡|Vx,Vy,Vz|=(Vx*Vy).Vz,鍙互寰楃煡錛屽綋鍚戦噺Vz鐨勬柟鍚戜笌鍚戦噺Vx*Vy(Vx涓嶸y鐨勫弶縐?鐨勫す瑙掑湪0-PI/2涔嬮棿鐨勬椂鍊欙紝灝變竴瀹氫細鏈?Vx*Vy).Vz>0錛岄偅涔堢敱鍩猴紙鍚戦噺緇勶級Vx,Vy,Vz緇勬垚鐨勫潗鏍囩郴灝變負鍙蟲墜鍧愭爣緋匯傚叾瀹烇紝璇寸櫧浜嗭紝灝辨槸鍚戦噺鍙夌Н鐨勬柟鍚戣瀹氫簡宸﹀彸鍧愭爣緋葷殑瀹氫箟銆?br />
涓夌淮x,y,z宸﹀彸鎵嬪潗鏍囩郴鐗逛緥錛?/strong>
浠や笁緇存寮忕┖闂寸┖瀛樺湪涓夊悜閲廣x=錛坸錛?錛?錛?x>0)錛孷y=錛?錛寉錛?錛?y>0)錛孷z=錛?錛?錛寊錛夛紙娉細榪欓噷瑙勫畾z杞寸殑姝f柟鍚戝拰鍚戦噺Vx*Vy鐨勬柟鍚戜竴鑷淬傦級姝ゆ椂錛屽悜閲廣x*Vy鐨勬柟鍚戞槸絎﹀悎鍙蟲墜鍧愭爣緋葷殑錛屽洜涓哄悜閲廣x*Vy鐨勬柟鍚戜笌鍏惰嚜韜殑澶硅涓?錛岀敱(Vx*Vy).Vz = xyz鍙煡錛屽綋z>0鏃訛紝璇ュ悜閲忕粍錛堬紙x錛?錛?錛夛紝錛?錛寉錛?錛夛紝錛?錛?錛寊錛夛級鏋勬垚鍙蟲墜鍧愭爣緋匯傚弽涔嬶紝鑻<0錛岄偅涔堢敱(Vx*Vy).Vz = xyz<0鍙煡錛岃鍚戦噺緇勶紙錛坸錛?錛?錛夛紝錛?錛寉錛?錛夛紝錛?錛?錛寊錛夛級鏋勬垚宸︽墜鍧愭爣緋匯傜壒渚嬶細錛?錛?錛?錛夛紝錛?錛?錛?錛夛紝錛?錛?錛?錛夋瀯鎴愬彸鎵嬪潗鏍囩郴錛岋紙1錛?錛?錛夛紝錛?錛?錛?錛夛紝錛?錛?錛?1錛夋瀯鎴愬乏鎵嬪潗鏍囩郴銆?/p>

SoRoMan 2006-08-08 12:53 鍙戣〃璇勮
]]>
絎旇:鎺掑簭綆楁硶http://m.shnenglu.com/SoRoMan/archive/2006/07/31/10730.htmlSoRoManSoRoManMon, 31 Jul 2006 07:14:00 GMThttp://m.shnenglu.com/SoRoMan/archive/2006/07/31/10730.htmlhttp://m.shnenglu.com/SoRoMan/comments/10730.htmlhttp://m.shnenglu.com/SoRoMan/archive/2006/07/31/10730.html#Feedback0http://m.shnenglu.com/SoRoMan/comments/commentRss/10730.htmlhttp://m.shnenglu.com/SoRoMan/services/trackbacks/10730.html//
// File: [TestSort.cpp]
// Description:[This file illustrate the sort methods. Make sure the length of the sequence consistent with its contents!]聽
// Author:[SoRoMan]
// Date:[07/31/2006]
// Version:[1.0]
// History: []
//聽

// INCLUDES ///////////////////////////////////////////////
#include "stdio.h"

// DEFINES ////////////////////////////////////////////////
#define N 11

// PROTOTYPES /////////////////////////////////////////////
void QuickSort(int *seq, int lenght);
void InsertSort(int *seq, int lenght);
void InsertSort2(int *seq, int lenght);
void ShellSort(int *seq, int lenght);
void IncrementInsertSort(int *seq, int length, int increment);
void HeapSort(int *seq, int length);
void SelectionSort(int *seq, int length);
void BubbleSort(int *seq, int length);
void BiBubbleSort(int *seq, int length);
void AdjustHeap(int *seq, int startIndex, int endIndex);

// GLOBALS ////////////////////////////////////////////////
int nAssignmentOperation = 0; // assignment counter
int nComparsionOperation = 0; // comparsion counter

// FUNCTIONS //////////////////////////////////////////////

int main(int argc, char* argv[])
{
聽printf("0: Original Sequence\n");
聽printf("1: Quick Sort\n");
聽printf("2: Insert Sort\n");
聽printf("3: Shell Sort\n");
聽printf("4: Insert Sort2\n");
聽printf("5: Heap Sort\n");
聽printf("6: Selection Sort\n");
聽printf("7: Bubble Sort\n");
聽printf("8: Bi-Bubble Sort\n");
聽printf("-1: Exit\n");聽

聽int cat = 0;聽
聽while (cat != -1)
聽{
聽聽// clear counter
聽聽nAssignmentOperation = 0;
聽聽nComparsionOperation = 0;

聽聽//int array[N] = {600, 64,6,78,246,445,345,445,7,4885,1,600, 64,6,78,246,445,345,445,7,4885,1,600, 64,6,78,246,445,345,445,7,4885,1,600, 64,6,78,246,445,345,445,7,4885,1,600, 64,6,78,246,445,345,445,7,4885,1,
聽聽//600, 64,6,78,246,445,345,445,7,4885,1,600, 64,6,78,246,445,345,445,7,4885,1,600, 64,6,78,246,445,345,445,7,4885,1,600, 64,6,78,246,445,345,445,7,4885,1,600, 64,6,78,246,445,345,445,7,4885,1};
聽聽int array[N] = {600, 64,6,78,246,445,345,445,7745,4885,1};

聽聽printf("\nPlease select sort method:");
聽聽scanf("%d", &cat);
聽聽printf("-------------------------------------------------\n");

聽聽switch(cat)
聽聽{
聽聽聽case 0:printf("No Sort. The Original Sequence is\n");
聽聽聽聽break;
聽聽聽case 1:printf("Quick Sort\n"); QuickSort(array, N);
聽聽聽聽break;
聽聽聽case 2:printf("Insert Sort\n"); InsertSort(array, N);
聽聽聽聽break;
聽聽聽case 3:printf("Shell Sort\n"); ShellSort(array, N);
聽聽聽聽break;
聽聽聽case 4:printf("Insert Sort2\n"); InsertSort2(array, N);
聽聽聽聽break;
聽聽聽case 5:printf("Heap Sort\n"); HeapSort(array, N);
聽聽聽聽break;
聽聽聽case 6:printf("Selection Sort\n"); SelectionSort(array, N);
聽聽聽聽break;
聽聽聽case 7:printf("Bubble Sort\n"); BubbleSort(array, N);
聽聽聽聽break;
聽聽聽case 8:printf("Bi-Bubble Sort\n"); BiBubbleSort(array, N);
聽聽聽聽break;
聽聽聽default:printf("Exit...\n");
聽聽聽聽return 0;
聽聽}

聽聽for(int i = 0; i < N; i++)
聽聽{
聽聽聽printf("int = %d\n", array[i]);
聽聽}

聽聽printf("Count of comparsion operation聽 = %d\n", nComparsionOperation);
聽聽printf("Count of assignment operation聽 = %d\n", nAssignmentOperation);
聽聽printf("-------------------------------------------------\n");
聽}

聽return 0;
}

inline void Swap(int *pCurrPost, int *pCurrKey)
{
聽nAssignmentOperation += 3;
聽int temp;

聽//swap value
聽temp = *pCurrPost;
聽*pCurrPost = *pCurrKey;
聽*pCurrKey = temp;
}

////////////////////////////////////////////////////////////////////////////////
// Quick Sort algorithm.聽 (By SoRoMan, 2006.7.31)
// 蹇熸帓搴忕殑鍩烘湰鎬濇兂鏄熀浜庡垎娌葷瓥鐣ョ殑銆傚浜庤緭鍏ョ殑瀛愬簭鍒桳[p..r]錛屽鏋滆妯¤凍澶熷皬鍒欑洿鎺ヨ繘琛屾帓搴忥紙姣斿鐢ㄥ墠榪扮殑鍐掓場銆侀夋嫨銆佹彃鍏ユ帓搴忓潎鍙級錛屽惁鍒欏垎涓夋澶勭悊錛?br />// 1.鍒嗚В(Divide)錛氬皢寰呮帓搴忓垪L[p..r]鍒掑垎涓轟袱涓潪絀哄瓙搴忓垪L[p..q]鍜孡[q+1..r]錛屼嬌L[p..q]涓換涓鍏冪礌鐨勫間笉澶т簬L[q+1..r]涓換涓鍏冪礌鐨勫箋傚叿浣撳彲閫氳繃榪欐牱鐨勯斿緞瀹炵幇錛氬湪搴忓垪L[p..r]涓夋嫨鏁版嵁鍏冪礌L[q]錛岀粡姣旇緝鍜岀Щ鍔ㄥ悗錛孡[q]灝嗗浜嶭[p..r]涓棿鐨勯傚綋浣嶇疆錛屼嬌寰楁暟鎹厓绱燣[q]鐨勫煎皬浜嶭[q+1..r]涓換涓鍏冪礌鐨勫箋?
// 2.閫掑綊姹傝В(Conquer)錛氶氳繃閫掑綊璋冪敤蹇熸帓搴忕畻娉曪紝鍒嗗埆瀵筁[p..q]鍜孡[q+1..r]榪涜鎺掑簭銆?
// 3.鍚堝茍(Merge)錛氱敱浜庡鍒嗚В鍑虹殑涓や釜瀛愬簭鍒楃殑鎺掑簭鏄氨鍦拌繘琛岀殑錛屾墍浠ュ湪L[p..q]鍜孡[q+1..r]閮芥帓濂藉簭鍚庝笉闇瑕佹墽琛屼換浣曡綆桳[p..r]灝卞凡鎺掑ソ搴忥紝鍗寵嚜鐒跺悎騫躲?
// 榪欎釜瑙e喅嫻佺▼鏄鍚堝垎娌繪硶鐨勫熀鏈楠ょ殑銆傚洜姝わ紝蹇熸帓搴忔硶鏄垎娌繪硶鐨勭粡鍏稿簲鐢ㄥ疄渚嬩箣涓銆?br />// Input Parameters: seq: pointer variable that identifies which sequence will be sorted.
// length: int that identifies the length of the sequence.
// Output Parameters: None.
// Return: None.
////////////////////////////////////////////////////////////////////////////////
void QuickSort(int *seq, int length)
{
聽if(length <= 1)
聽{
聽聽return;
聽}
聽else
聽{
聽聽int post = *seq; // set post
聽聽int *pCurrPost = seq; // set current position of post
聽聽int *pCurrKey; // current position of key

聽聽for(int j = length - 1, i = 1; i <= j;)
聽聽{
聽聽聽// handle the right sub-sequence
聽聽聽while(i <= j)
聽聽聽{
聽聽聽聽pCurrKey = seq + j;

聽聽聽聽if(*pCurrKey < post)
聽聽聽聽{
聽聽聽聽聽Swap(pCurrPost, pCurrKey);
聽聽聽聽聽pCurrPost = pCurrKey;

聽聽聽聽聽break;
聽聽聽聽}
聽聽聽聽else
聽聽聽聽{
聽聽聽聽聽j--;
聽聽聽聽}

聽聽聽聽nComparsionOperation ++;
聽聽聽}

聽聽聽// handle the left sub-sequence
聽聽聽while(i <= j)
聽聽聽{
聽聽聽聽pCurrKey = seq + i;

聽聽聽聽if(*pCurrKey > post)
聽聽聽聽{
聽聽聽聽聽Swap(pCurrPost, pCurrKey);
聽聽聽聽聽pCurrPost = pCurrKey;

聽聽聽聽聽break;
聽聽聽聽}
聽聽聽聽else
聽聽聽聽{
聽聽聽聽聽i++;
聽聽聽聽}

聽聽聽聽nComparsionOperation ++;
聽聽聽}
聽聽}
聽聽// handle two sub sequences recursively
聽聽int lleng = pCurrPost - seq; // left sub sequence
聽聽int rleng = length - lleng - 1; // right sub sequence
聽聽QuickSort(seq, lleng);
聽聽QuickSort(seq + lleng + 1, rleng);
聽}
}


////////////////////////////////////////////////////////////////////////////////
// Insert Sort algorithm (A special increment insert sort, increment = 1).聽 (By SoRoMan, 2006.7.31)
//鎻掑叆鎺掑簭鐨勫熀鏈濇兂鏄紝緇忚繃i-1閬嶅鐞嗗悗,L[1..i-1]宸辨帓濂藉簭銆傜i閬嶅鐞嗕粎灝哃[i]鎻掑叆L[1..i-1]鐨勯傚綋浣嶇疆錛屼嬌寰桳[1..i]鍙堟槸鎺掑ソ搴忕殑搴忓垪銆傝杈懼埌榪欎釜鐩殑錛屾垜浠彲浠ョ敤欏哄簭姣旇緝鐨勬柟娉曘傞鍏堟瘮杈僉[i]鍜孡[i-1]錛屽鏋淟[i-1]鈮?L[i]錛屽垯L[1..i]宸叉帓濂藉簭錛岀i閬嶅鐞嗗氨緇撴潫浜嗭紱鍚﹀垯浜ゆ崲L[i]涓嶭[i-1]鐨勪綅緗紝緇х畫姣旇緝L[i-1]鍜孡[i-2]錛岀洿鍒版壘鍒版煇涓涓綅緗甹(1鈮鈮-1)錛屼嬌寰桳[j] 鈮[j+1]鏃朵負姝€?br />//綆璦涔?鎻掑叆鎺掑簭灝辨槸姣忎竴姝ラ兘灝嗕竴涓緟鎺掓暟鎹寜鍏跺ぇ灝忔彃鍏ュ埌宸茬粡鎺掑簭鐨勬暟鎹腑鐨勯傚綋浣嶇疆錛岀洿鍒板叏閮ㄦ彃鍏ュ畬姣曘傛彃鍏ユ帓搴忔柟娉曞垎鐩存帴鎻掑叆鎺掑簭鍜屾姌鍗婃彃鍏ユ帓搴忎袱縐嶏紝榪欓噷鍙粙緇嶇洿鎺ユ彃鍏ユ帓搴忥紝鎶樺崐鎻掑叆鎺掑簭鐣欏埌鈥滄煡鎵鋸濆唴瀹逛腑榪涜
// Input Parameters: seq: pointer variable that identifies which sequence will be sorted.
// length: int that identifies the length of the sequence.
// Output Parameters: None.
// Return: None.
////////////////////////////////////////////////////////////////////////////////
void InsertSort(int *seq, int length)
{
聽IncrementInsertSort(seq, length, 1);
}

void InsertSort2(int *seq, int length)
{
聽for(int i = 1; i < length; i++)
聽{
聽聽for (int j = 0; j < i; j++)
聽聽{
聽聽聽if(*(seq + i) < *(seq + j))
聽聽聽{聽
聽聽聽聽int temp = *(seq + i);
聽聽聽聽nAssignmentOperation ++;

聽聽聽聽// insert, move (i-j) items
聽聽聽聽for(int k = i; k > j; k-- )
聽聽聽聽{
聽聽聽聽聽*(seq + k) = *(seq + k - 1);
聽聽聽聽聽nAssignmentOperation ++;
聽聽聽聽}

聽聽聽聽*(seq + k) = temp;
聽聽聽聽nAssignmentOperation ++;

聽聽聽聽nComparsionOperation ++;

聽聽聽聽break;
聽聽聽}
聽聽}
聽}
}

void IncrementInsertSort(int *seq, int length, int increment)
{
聽for(int k = 0; k < increment; k++)
聽{
聽聽for (int i = increment + k; i < length; i+=increment + k)
聽聽{
聽聽聽int temp = *(seq + i);
聽聽聽for (int j = i; j > increment - 1;)
聽聽聽{
聽聽聽聽nComparsionOperation ++;

聽聽聽聽if(temp > *(seq + j - increment))
聽聽聽聽{聽聽聽聽
聽聽聽聽聽*(seq + j) = *(seq + j - increment);
聽聽聽聽聽nAssignmentOperation ++;
聽聽聽聽聽j-=increment;
聽聽聽聽}
聽聽聽聽else
聽聽聽聽{
聽聽聽聽聽break;
聽聽聽聽}
聽聽聽}

聽聽聽*(seq + j) = temp;
聽聽聽nAssignmentOperation ++;聽聽聽聽
聽聽}
聽}聽
}

////////////////////////////////////////////////////////////////////////////////
// Shell Sort algorithm (Increment insert sort, increment = increment/3 + 1.).聽 (By SoRoMan, 2006.7.31)
// Input Parameters: seq: pointer variable that identifies which sequence will be sorted.
// length: int that identifies the length of the sequence.
// Output Parameters: None.
// Return: None.
////////////////////////////////////////////////////////////////////////////////
void ShellSort(int *seq, int length)
{
聽for(int increment = length; increment > 1;)
聽{
聽聽increment = increment/3 + 1;
聽聽IncrementInsertSort(seq, length, increment);
聽}
}


////////////////////////////////////////////////////////////////////////////////
// Heap Sort algorithm.聽 (SoRoMan, 2006.7.31)
//
//1.鍫嗙殑姒傚康錛?br />//鍫嗘槸涓涓叧閿瓧搴忓垪{k1,k2,鈥?kn},瀹冨叿鏈夊涓嬬壒鎬э細
//ki 鈮2i, ki 鈮?k2i+1
//鎴杒i 鈮?k2i,ki 鈮?k2i+1(i=1,2,鈥? 鈹攏/2鈹?
//鍫嗙殑鐗規(guī)у湪瀹屽叏浜屽弶鏍戜腑瑙i噴涓猴細瀹屽叏浜屽弶鏍戜腑浠諱竴緇撶偣鐨勫叧閿瓧閮藉皬浜庣瓑浜庯紙鎴栧ぇ浜庣瓑浜庯級瀹冪殑宸﹀彸瀛╁瓙鐨勫叧閿瓧銆?br />//濡備笅鍒楀叧閿瓧搴忓垪鍧囨槸鍫嗭細 {5,23,16,68,94,72,71,73} (灝忛《鍫? {96,83,27,38,11,9} 錛堝ぇ欏跺爢錛?鐢卞爢鐨勫畾涔夊彲鐭ワ細鑻ュ叧閿瓧搴忓垪{k1,k2,鈥?kn}鏄爢錛屽垯鍫嗛《鍏冪礌鏄痭涓厓绱犲簭鍒椾腑鐨勬渶灝忥紙鎴栨渶澶э級鍏冪礌銆?/p>

//2.鍩烘湰鎬濇兂錛?br />//棣栧厛灝嗗垵濮嬪緟鎺掑簭璁板綍搴忓垪寤哄爢錛屽垯鍫嗛《鍏冪礌蹇呬負鍚渶澶у叧閿瓧鎴栨渶灝忓叧閿瓧鐨勮褰曪紝杈撳嚭璇ヨ褰曪紝鐒跺悗灝嗗墿浣欒褰曞啀璋冩暣涓哄爢錛屽姝ゅ弽澶嶏紝鐩磋嚦鎺掑簭緇撴潫銆?br />//鍦ㄥ爢鎺掑簭涓昏闇瑙e喅涓や釜闂錛?br />//鈶?濡備綍寤哄爢錛?鍦ㄥ畬鍏ㄤ簩鍙夋爲涓紝鎵鏈夊簭鍙穒>鈹攏/2鈹樼殑緇撶偣閮芥槸鍙跺瓙錛屽洜姝わ紝浠ヨ繖浜涚粨鐐逛負鏍圭殑瀛愭爲鍧囧凡鏄爢錛岃繖鏍峰彧闇灝嗕互搴忓彿涓衡敂n/2鈹? 鈹攏/2鈹?1, 鈹攏/2鈹?2,鈥?1鐨勭粨鐐逛負鏍廣佺殑瀛愭爲閮借皟鏁翠負鍫嗗嵆鍙傚湪鎸夋嬈″簭璋冩暣姣忎釜緇撶偣鏃訛紝鍏跺乏銆佸彸瀛愭爲鍧囧凡鏄爢銆?br />//鈶?鑻i鐨勫乏銆佸彸瀛愭爲宸茬粡鏄爢錛屽浣曞皢浠i涓烘牴鐨勫畬鍏ㄤ簩鍙夋爲涔熻皟鏁翠負鍫嗭紵 鍥爇i鐨勫乏銆佸彸瀛愭爲宸茬粡鏄爢錛屾墍浠ュ繀欏誨湪ki 鍜屽畠鐨勫乏銆佸彸瀛╁瓙涓夊嚭鏈灝忥紙鎴栨渶澶э級鐨勭粨鐐規(guī)斁鍒発i鐨勪綅緗笂錛屼笉濡ㄨk2I鍏抽敭瀛楁渶灝忥紝灝唊i涓巏2I浜ゆ崲浣嶇疆錛岃屼氦鎹箣鍚庢湁鍙兘瀵艱嚧浠2I涓烘牴鐨勫瓙鏍戜笉鍐嶄負鍫嗭紝浜庢槸鍙噸澶嶄笂榪拌繃紼嬶紝灝嗕互k2I涓烘牴鐨勫瓙鏍戣皟鏁翠負鍫嗭紝鈥︹?濡傛閫愬眰涓嬪幓錛屾渶澶氬彲鑳戒竴鐩磋皟鏁村埌鏍戝彾錛屾鏂規(guī)硶縐頒負"絳涢夋硶"銆?/p>

//3.鎬ц兘鍒嗘瀽錛?br />//鍫嗘帓搴忕殑鏃墮棿涓昏鐢卞緩绔嬪垵濮嬪爢鍜屼笉鏂噸澶嶅緩鍫嗚繖涓ら儴鍒嗙殑鏃墮棿寮閿鏋勬垚銆傚叾涓細寤虹珛鍒濆鍫嗘椂錛屾誨叡闇榪涜鐨勫叧閿瓧姣旇緝嬈℃暟 鈮?4n =O(n) ;鎺掑簭榪囩▼涓繘琛宯-1嬈¢噸寤哄爢鎵榪涜鐨勬繪瘮杈冩鏁頒笉瓚呰繃涓嬪紡錛?2*(鈹?log2(n-1) 鈹?鈹?log2(n-2) 鈹?鈥? 鈹?log22 鈹? < 2n 鈹?log2n 鈹?O(n log2n)鍥犳鍫嗘帓搴忔葷殑鏃墮棿澶嶆潅搴︽槸 O(n+ n log2n)= O(n log2n)銆?br />//鍫嗘帓搴忓湪鏈鍧忔儏鍐典笅鐨勬椂闂村鏉傚害涔熸槸O(nlog2n)錛岀浉瀵逛簬蹇熸帓搴忔潵璇達紝榪欐槸鍫嗘帓搴忕殑鏈澶т紭鐐廣?br />//鍙﹀錛屽爢鎺掑簭浠呴渶涓涓褰曞ぇ灝忎緵浜ゆ崲鐢ㄧ殑杈呭姪絀洪棿銆傜敱浜庡緩鍒濆鍫嗘墍闇鐨勬瘮杈冩鏁拌緝澶氾紝鎵浠ュ爢鎺掑簭涓嶉傚疁浜庤褰曡緝?yōu)畱鐨勬枃錃g錛屼絾瀵筺杈冨ぇ鐨勬枃浠惰繕鏄緢鏈夋晥鐨勩?br />// Input Parameters: seq: pointer variable that identifies which sequence will be sorted.
// length: int that identifies the length of the sequence.
// Output Parameters: None.
// Return: None.
////////////////////////////////////////////////////////////////////////////////
void HeapSort(int *seq, int length)
{
聽for(int n = length; n > 0; n--)
聽{
聽聽for(int j = n/2; j > 0; j--)
聽聽{
聽聽聽AdjustHeap(seq, j, n);
聽聽}

聽聽Swap(seq, seq+n-1);聽聽
聽}聽
}

void AdjustHeap(int *seq, int startIndex, int endIndex)
{
聽while(2*startIndex <= endIndex)
聽{
聽聽int i =聽 startIndex - 1;
聽聽startIndex = startIndex*2;

聽聽nComparsionOperation ++;
聽聽if (startIndex < endIndex && *(seq + startIndex -1) < *(seq + startIndex))
聽聽{
聽聽聽startIndex++;
聽聽}

聽聽nComparsionOperation ++;
聽聽if(*(seq + startIndex -1) > *(seq + i))
聽聽{
聽聽聽Swap(seq + startIndex - 1, seq + i);
聽聽}聽聽
聽聽else
聽聽{
聽聽聽break;
聽聽}
聽}
}

////////////////////////////////////////////////////////////////////////////////
// Selection Sort algorithm.聽 (SoRoMan, 2006.7.31)
// Input Parameters: seq: pointer variable that identifies which sequence will be sorted.
// length: int that identifies the length of the sequence.
// Output Parameters: None.
// Return: None.
////////////////////////////////////////////////////////////////////////////////
void SelectionSort(int *seq, int length)
{
聽for(int i = 0; i < length; i++)
聽{
聽聽int k = i;
聽聽for(int j = i+1; j < length; j++)
聽聽{
聽聽聽nComparsionOperation ++;
聽聽聽if (*(seq + j) < *(seq + k))
聽聽聽{
聽聽聽聽k = j;
聽聽聽}
聽聽}

聽聽Swap(seq + k, seq + i);
聽}
}

////////////////////////////////////////////////////////////////////////////////
// Bubble Sort algorithm.聽 (SoRoMan, 2006.7.31)
// Input Parameters: seq: pointer variable that identifies which sequence will be sorted.
// length: int that identifies the length of the sequence.
// Output Parameters: None.
// Return: None.
////////////////////////////////////////////////////////////////////////////////
void BubbleSort(int *seq, int length)
{
聽for(int i = 0; i < length; i++)
聽{
聽聽for(int j = length-1; j > i; j--)
聽聽{
聽聽聽nComparsionOperation ++;
聽聽聽if (*(seq + j) < *(seq + j - 1))
聽聽聽{
聽聽聽聽Swap(seq + j, seq + j - 1);
聽聽聽}
聽聽}
聽}
}

////////////////////////////////////////////////////////////////////////////////
// Bi-Directinal Bubble Sort algorithm.聽 (SoRoMan, 2006.7.31)
//鎬濇兂錛?br />//鍩轟簬鍦ㄤ竴瓚熸帓搴忎腑錛屼綅浜庢渶鍚庝竴嬈′氦鎹㈠叧閿瓧鐨勭殑鍚庨潰鐨勫叧閿瓧搴忓垪宸茬粡鏄湁搴忕殑錛屾墍浠ヤ笉鐢ㄥ啀鎺掑簭銆?br />//鐩稿浜庝竴鑸殑鍐掓場鎺掑簭錛屽彲浠ュ噺灝戝叧閿瓧姣旇緝嬈℃暟錛屼絾浜ゆ崲嬈℃暟涓嶅彉銆?br />// Input Parameters: seq: pointer variable that identifies which sequence will be sorted.
// length: int that identifies the length of the sequence.
// Output Parameters: None.
// Return: None.
////////////////////////////////////////////////////////////////////////////////
void BiBubbleSort(int *seq, int length)
{
聽int k,low,up;
聽low = 0;
聽up = length-1;
聽while (up > low)
聽{
聽聽k = low;聽聽

聽聽for(int i = low; i < up; i++)
聽聽{
聽聽聽nComparsionOperation ++;
聽聽聽if (*(seq + i) > *(seq + i + 1))
聽聽聽{
聽聽聽聽Swap(seq + i, seq + i + 1);

聽聽聽聽k = i;
聽聽聽}
聽聽}

聽聽up = k;

聽聽for(int j = up; j > low; j--)
聽聽{
聽聽聽nComparsionOperation ++;
聽聽聽if (*(seq + j) < *(seq + j - 1))
聽聽聽{
聽聽聽聽Swap(seq + j, seq + j - 1);

聽聽聽聽k = j;
聽聽聽}
聽聽}聽

聽聽low = k;
聽}

}




SoRoMan 2006-07-31 15:14 鍙戣〃璇勮
]]>
絎旇錛欱resenham鐢葷嚎綆楁硶鐨勬帹瀵?/title><link>http://m.shnenglu.com/SoRoMan/archive/2006/07/27/10574.html</link><dc:creator>SoRoMan</dc:creator><author>SoRoMan</author><pubDate>Thu, 27 Jul 2006 03:07:00 GMT</pubDate><guid>http://m.shnenglu.com/SoRoMan/archive/2006/07/27/10574.html</guid><wfw:comment>http://m.shnenglu.com/SoRoMan/comments/10574.html</wfw:comment><comments>http://m.shnenglu.com/SoRoMan/archive/2006/07/27/10574.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://m.shnenglu.com/SoRoMan/comments/commentRss/10574.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/SoRoMan/services/trackbacks/10574.html</trackback:ping><description><![CDATA[ <p>浠ュ墠鐪嬪埌Bresenham鐢葷嚎綆楁硶錛岀洿鎺ユ嬁鏉ョ敤錛屾病鏈夊幓鎺ㄥ瀹?榪戞棩,鍙傝冧竴浜涜祫鏂?鐗規(guī)暣鐞嗗叾綆楁硶鎺ㄥ榪囩▼濡備笅銆傚悇浣嶅ぇ铏懼鏋滅煡閬撳叾緇嗚妭錛岃刀绱ч棯榪囷紝涓嶇敤嫻垂鏃墮棿浜嗐?/p> <p> <strong>鍩烘湰涓夿resenham鐢葷嚎綆楁硶鐨勬濊礬濡備笅:</strong> </p> <p>// 鍋囪璇ョ嚎孌典綅浜庣涓璞¢檺鍐呬笖鏂滅巼澶т簬0灝忎簬1,璁捐搗鐐逛負(x1,y1),緇堢偣涓?x2,y2).<br />// 鏍規(guī)嵁瀵圭О鎬?鍙帹瀵艱嚦鍏ㄨ薄闄愬唴鐨勭嚎孌?<br />1.鐢昏搗鐐?x1,y1).<br />2.鍑嗗鐢諱笅涓偣銆倄鍧愭爣澧?錛屽垽鏂鏋滆揪鍒扮粓鐐癸紝鍒欏畬鎴愩傚惁鍒欙紝鐢卞浘涓彲鐭?涓嬩釜瑕佺敾鐨勭偣瑕佷箞涓哄綋鍓嶇偣鐨勫彸閭繪帴鐐?瑕佷箞鏄綋鍓嶇偣鐨勫彸涓婇偦鎺ョ偣.<br />2.1.濡傛灉綰挎ax+by+c=0涓巟=x1+1鐨勪氦鐐圭殑y鍧愭爣澶т簬M鐐圭殑y鍧愭爣鐨勮瘽,涓嬩釜鐐逛負U(x1+1,y1+1)<br />2.2.鍚﹀垯,涓嬩釜鐐逛負B(x1+1,y1+1)<br />3.鐢葷偣(U鎴栬匓).<br />4.璺沖洖絎?姝?<br />5.緇撴潫.<br /><br /><img src="http://m.shnenglu.com/images/cppblog_com/soroman/2315/t_Bresenham%20Line.bmp" /><br /></p> <p>榪欓噷闇瑕佺粏鍖栫殑鏄庝箞鍒ゆ柇涓嬩釜瑕佺敾鐨勭偣涓哄綋鍓嶇偣鐨勫彸閭繪帴鐐硅繕鏄綋鍓嶇偣鐨勫彸涓婇偦鎺ョ偣.</p> <p>璁劇嚎孌墊柟紼嬶細ax+by+c=0(x1<x<x2,y1<y<y2)<br />浠x=x2-x1,dy=y2-y1<br />鍒欙細鏂滅巼-a/b = dy/dx.</p> <p>浠庣涓涓偣寮濮嬶紝鎴戜滑鏈塅(x,1,y1) = a*x1+b*y1+c=0<br />涓嬮潰姹傜嚎孌礱x+by+c=0涓巟=x1+1鐨勪氦鐐?<br />鐢盿*(x1+1)+b*y+c = 0, 姹傚嚭浜ょ偣鍧愭爣y=(-c-a(x1+1))/b<br />鎵浠ヤ氦鐐逛笌M鐨剏鍧愭爣宸糞ub1 = (-c-a(x1+1))/b - (y1+0.5) = -a/b-0.5錛屽嵆Sub1鐨勫濮嬪間負-a/b-0.5銆?/p> <p>鍒欏彲寰楁潯浠跺綋 Sub1 = -a/b-0.5>0鏃跺?鍗充笅涓偣涓篣.<br />鍙嶄箣,涓嬩釜鐐逛負B.<br />浠e叆a/b,鍒橲ub1 = dy/dx-0.5.</p> <p>鍥犱負鏄釜寰幆涓兘瑕佸垽鏂璖ub,鎵浠ュ緱姹傚嚭寰幆涓嬬殑Sub琛ㄨ揪寮?鎴戜滑鍙互姹傚嚭Sub鐨勫樊鍊肩殑琛ㄨ揪寮?涓嬮潰姹倄=x1+2鏃剁殑Sub錛屽嵆Sub2<br />1.濡傛灉涓嬩笅涓偣鏄笅涓偣鐨勫彸涓婇偦鎺ョ偣錛屽垯<br />Sub2 = (-c-a(x1+2))/b - (y1+1.5) = -2a/b - 1.5<br />鏁匰ub宸糄sub = Sub2 - Sub1 = -2a/b - 1.5 - (-a/b-0.5) = -a/b - 1.浠e叆a/b寰桪sub = dy/dx -1;<br />2.濡傛灉涓嬩笅涓偣鏄笅涓偣鐨勫彸閭繪帴鐐癸紝<br />Sub2 = (-c-a(x1+2))/b - (y1+0.5) = -2a/b - 0.5<br />鏁匰ub宸糄sub = Sub2 - Sub1 = -2a/b - 0.5 - (-a/b-0.5) = -a/b. 浠e叆a/b寰桪sub = dy/dx;</p> <p>浜庢槸錛屾垜浠湁浜哠ub鐨勫濮嬪糞ub1 = -a/b-0.5 = dy/dx-0.5,鍙堟湁浜哠ub鐨勫樊鍊肩殑琛ㄨ揪寮廌sub = dy/dx -1 錛堝綋Sub1 > 0錛夋垨 dy/dx錛堝綋Sub1 < 0錛?緇嗗寲宸ヤ綔瀹屾垚銆?/p> <p> <strong>浜庢槸pcode鍙互緇嗗寲濡備笅錛?/strong> </p> <p>// Pcode for Bresenham Line<br />// By SoRoMan<br />x=x1;<br />y=y1;<br />dx = x2-x1;<br />dy = y2-y1;<br />Sub = dy/dx-0.5; // 璧嬪垵鍊鹼紝涓嬩釜瑕佺敾鐨勭偣涓庝腑鐐圭殑宸?/p> <p>DrawPixel(x, y); // 鐢昏搗鐐?br />while(x<x2)<br />{<br />聽x++; <br />聽if(Sub > 0) // 涓嬩釜瑕佺敾鐨勭偣涓哄綋鍓嶇偣鐨勫彸涓婇偦鎺ョ偣<br />聽{<br />聽 Sub += dy/dx - 1; //涓嬩笅涓鐢葷殑鐐逛笌涓偣鐨勫樊鍊?br />聽 y++; // 鍙充笂閭繪帴鐐箉闇澧?<br />聽}<br />聽else// 涓嬩釜瑕佺敾鐨勭偣涓哄綋鍓嶇偣鐨勫彸閭繪帴鐐?br />聽{<br />聽 Sub += dy/dx;聽 <br />聽}<br />// 鐢諱笅涓偣<br />DrawPixel(x,y);<br />}</p> <p> <strong>PS:涓鑸紭鍖栵細<br /></strong>涓洪伩鍏嶅皬鏁拌漿鏁存暟浠ュ強闄ゆ硶榪愮畻錛岀敱浜嶴ub鍙槸鐢ㄦ潵榪涜姝h礋鍒ゆ柇錛屾墍浠ュ彲浠ヤ護Sub = 2*dx*Sub = 2dy-dx,鍒?br />鐩稿簲鐨凞Sub = 2dy - 2dx鎴?dy.</p> <p> <strong>鎬濊?:</strong>濡傛灉Sub = 0鏃訛紝浼氫駭鐢熷彇涓や釜鐐歸兘鍙互鐨勯棶棰樸傝繖涓棶棰樿繕娌℃繁鍏ャ?/p> <img src ="http://m.shnenglu.com/SoRoMan/aggbug/10574.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/SoRoMan/" target="_blank">SoRoMan</a> 2006-07-27 11:07 <a href="http://m.shnenglu.com/SoRoMan/archive/2006/07/27/10574.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>鎬濊冿細璁$畻鏈哄浘褰㈠涓殑宸︿笂鍍忕礌濉厖綰﹀畾錛坱op-left filling convention for filling geometry錛?/title><link>http://m.shnenglu.com/SoRoMan/archive/2006/07/26/10547.html</link><dc:creator>SoRoMan</dc:creator><author>SoRoMan</author><pubDate>Wed, 26 Jul 2006 08:55:00 GMT</pubDate><guid>http://m.shnenglu.com/SoRoMan/archive/2006/07/26/10547.html</guid><wfw:comment>http://m.shnenglu.com/SoRoMan/comments/10547.html</wfw:comment><comments>http://m.shnenglu.com/SoRoMan/archive/2006/07/26/10547.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://m.shnenglu.com/SoRoMan/comments/commentRss/10547.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/SoRoMan/services/trackbacks/10547.html</trackback:ping><description><![CDATA[ <div id="hvzpftn" class="postText"> <p> <strong>鎬濊冿細璁$畻鏈哄浘褰㈠涓殑宸︿笂鍍忕礌濉厖綰﹀畾錛坱op-left filling convention for filling geometry錛?/strong> <br /> <br />鎴戜滑鐭ラ亾鐩墠鏄劇ず鍣ㄦ樉紺虹殑鍘熺悊錛屽厜鏍呭寲鏄劇ず鏈灝忕殑鍗曞厓鏄痯ixel(鎴栬呰綺懼害涓簆iexl錛夛紝涓涓猵ixel鎵鍗犵殑鍖哄煙涓鑸槸涓鏂瑰艦錛屾樉紺哄櫒涓婄殑鐢婚潰灝辯敱涓涓垨澶氫釜榪欐牱鐨勫皬鏂規(guī)牸緇勬垚銆傚鏋滀互姣忎釜灝忔柟鏍間負涓涓崟鍏冩潵鍒跺畾灞忓箷鍧愭爣鐨勮瘽錛岄棶棰樺氨鏉ヤ簡錛屽洜涓烘柟鏍兼湰韜湁澶у皬錛屼笉鏄竴涓弗鏍兼剰涔変笂鐨?鐐?銆?br /><br /><strong>闂鏉ユ簮錛氬睆騫曞潗鏍囩偣鐨勯夊彇浠ュ強鍍忕礌鏂規(guī)牸鏈韓鐨勫ぇ灝?/strong><br />濡傛灉浠ユ柟鏍間腑蹇冪偣涓哄熀鍑嗗埗瀹氬潗鏍囩偣錛堝嵆瀵逛簬浠繪剰涓鏁存暟鍧愭爣鐐筽(x,y),p蹇呬負鏌愪釜鍍忕礌鏂規(guī)牸鐨勪腑蹇冿級錛屼互涓涓柟鏍間負璺ㄥ害鏉ュ埗瀹氬睆騫曞潗鏍囩郴鐨勮瘽銆傚鍥撅紝灞忓箷涓?X3鐨勬柟鏍肩粍鎴愪竴涓鏂瑰艦鐨勭敾闈紝濡傛灉鎸夌収鏂規(guī)牸涓績鐐逛負鍩哄噯鍒跺畾鍧愭爣鐐癸紝鍏跺尯鍩熷睆騫曞潗鏍囦負錛?錛?錛?錛?錛夛紙娉ㄦ剰錛?錛?錛?閮戒綅浜庢柟鏍間腑蹇冿紝鍏朵腑錛屽乏涓婅鍧愭爣涓?0,0)錛屽彸涓嬭鍧愭爣涓猴紙2錛?錛夛級錛岃屾寜鐓ф暟瀛﹁繍綆楋紝鍏朵笂涓嬭法璺濆氨鏄?-0 = 2 pixels錛屽乏鍙寵法璺?-0 = 2 pixels錛屽嵆鎬誨叡鍖呭惈2X2=4涓柟鏍?鑰屽疄闄呯敾闈腑鐨勮法璺濇槸3X3錛屽嵆鍏卞寘鍚?涓柟鏍鹼紙浠庢渶宸︿笂绔埌鏈鍙充笅绔級錛岄棶棰樻潵浜嗭紝鍓嶅悗鐭涚浘浜嗐傚乏涓婂儚绱犲~鍏呯害瀹氬彲浠ヨВ鍐寵繖涓棶棰樸?br /><br /><strong>闂瑙e喅錛氬乏涓婂儚绱犲~鍏呯害瀹?/strong><br />榪樻槸涓懼垰鎵嶇殑渚嬪瓙錛屽鏋滅粰瀹氬乏涓婅鍧愭爣涓?0,0)錛屽彸涓嬭鍧愭爣涓猴紙2錛?錛夌殑鐭╁艦鍖哄煙錛屽彨鏄劇ず璁懼鍘葷粯鍒剁殑璇濓紝鎸夌収宸︿笂鍍忕礌濉厖綰﹀畾錛屽湪灞忓箷涓婂~鍏呯殑鍍忕礌鐐瑰皢鏄?錛?錛?錛?錛?錛?錛?錛?錛?錛?錛?錛?錛夎繖涓?X2鍖哄煙錛岃岄潪鍥句腑鎵紺虹殑3X3鍖哄煙銆傚弽榪囨潵璇村浘涓墍紺虹殑3X3鍖哄煙瑕佺敤鍧愭爣琛ㄧず鐨勮瘽搴旇鏄紙0錛?錛?錛?錛夈傜畝鍗曟潵璇達紝鍦ㄥ乏涓婂儚绱犲~鍏呯害瀹氫笅錛岃濉厖錛坸1,y1,x2,y2錛夛紙x1,y1,x2,y2涓烘暣鏁幫級鐨勭煩褰紝瀹為檯濉厖鐨勫尯鍩熶細鏄紙x1-0.5,y1-0.5,x2-0.5,y2-0.5錛?榪欎釜鍖哄煙鐨勫乏涓婅鍍忕礌鍧愭爣涓猴紙x1,y1錛?鍙充笅瑙掑儚绱犲潗鏍囦負(x2-1,y2-1)錛屽嵆瀹為檯鐨勫~鍏呭尯鍩熶細鍚戝乏鍜屽悜涓婂悇鍋忕Щ0.5涓儚绱犮傛晠縐板乏涓婂儚绱犲~鍏呯害瀹氥?/p> <p>聽 0 1聽2<br />聽聽 0 鍙e彛鍙?br />聽聽 1 鍙e彛鍙?br />聽聽 2 鍙e彛鍙?br /></p> <p>D3D, GDI, OpenGL絳夊浘褰㈠簱浣跨敤宸︿笂濉厖綰﹀畾鐨勶紝濡傛灉鎺ヨЕ榪囪繖浜涘浘褰㈠簱錛屼綘鍙兘浼氱煡閬撹繖涓害瀹氥傝繕璁板緱鐢諱竴涓叏灞忓箷鐨勭煩褰㈠惂錛欴rawRectangle(0, 0, Screen_Width-1, Screen_Height-1)銆?br /><br /><strong>鎯蟲硶涓錛?/strong>鎯沖埌鍒殑濉厖綰﹀畾錛屾瘮濡傚彸涓婏紝宸︿笅錛屽彸涓嬬瓑錛岃繖浜涗笉鐭ラ亾鏈夊摢浜涚郴緇熶嬌鐢ㄣ?br /><br /><strong>鎯蟲硶浜岋細</strong>濡傛灉浠ュ儚绱犳柟鏍肩殑宸︿笂瑙掍負鍩哄噯鍒跺畾鍧愭爣鐐癸紙鍗沖浜庝換鎰忎竴鏁存暟鍧愭爣鐐筽(x,y),p蹇呬負鏌愪釜鍍忕礌鏂規(guī)牸鐨勫乏涓婅錛夛紝鎯呭喌鎬庝箞鏍鳳紵榪欐椂錛岀粰瀹氾紙0錛?錛?錛?錛夛紝鍒欏~鍏呮椂鍙互榪樹細閬囧埌涓鏍風殑闂錛屽~鍏咃紙0錛?錛?錛?錛?錛?錛?錛?錛?錛?錛?錛夛紝錛?錛?錛夛紝錛?錛?錛夛紝錛?錛?錛夛紝錛?錛?錛夛紝錛?錛?錛夛紝鏈鍚庤繕鏄寘鍚簡3X3= 9涓儚绱犮?br /><br /><strong>鎯蟲硶涓夛細</strong><br />to be continued...</p> </div> <img src ="http://m.shnenglu.com/SoRoMan/aggbug/10547.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/SoRoMan/" target="_blank">SoRoMan</a> 2006-07-26 16:55 <a href="http://m.shnenglu.com/SoRoMan/archive/2006/07/26/10547.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>Self Training - Renderinghttp://m.shnenglu.com/SoRoMan/archive/2006/07/24/10417.htmlSoRoManSoRoManMon, 24 Jul 2006 09:33:00 GMThttp://m.shnenglu.com/SoRoMan/archive/2006/07/24/10417.htmlhttp://m.shnenglu.com/SoRoMan/comments/10417.htmlhttp://m.shnenglu.com/SoRoMan/archive/2006/07/24/10417.html#Feedback1http://m.shnenglu.com/SoRoMan/comments/commentRss/10417.htmlhttp://m.shnenglu.com/SoRoMan/services/trackbacks/10417.html Self Training-Rendering
Tool
聽聽聽Maya Basic
聽聽聽Maya Rendering Basic
聽聽聽Maya API/SDK
Library
聽聽聽OpenGL Basic
Theory
聽聽聽Computering Geometry
聽聽聽Real-Time Rendering
聽聽聽聽聽聽Graphic Algorithm
聽聽聽聽聽聽聽聽聽Draw
聽聽聽聽聽聽聽聽聽聽聽聽Draw Line
聽聽聽聽聽聽聽聽聽聽聽聽Draw Circle
聽聽聽聽聽聽聽聽聽Clip
聽聽聽聽聽聽聽聽聽聽聽聽Object Space
聽聽聽聽聽聽聽聽聽聽聽聽Image Space
聽聽聽Linear Math

To be continued...

SoRoMan 2006-07-24 17:33 鍙戣〃璇勮
]]>
Design Pattern涔婼ingleton妯″紡http://m.shnenglu.com/SoRoMan/archive/2006/07/16/10140.htmlSoRoManSoRoManSun, 16 Jul 2006 15:12:00 GMThttp://m.shnenglu.com/SoRoMan/archive/2006/07/16/10140.htmlhttp://m.shnenglu.com/SoRoMan/comments/10140.htmlhttp://m.shnenglu.com/SoRoMan/archive/2006/07/16/10140.html#Feedback3http://m.shnenglu.com/SoRoMan/comments/commentRss/10140.htmlhttp://m.shnenglu.com/SoRoMan/services/trackbacks/10140.html闃呰鍏ㄦ枃

SoRoMan 2006-07-16 23:12 鍙戣〃璇勮
]]>
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
      <noscript id="pjuwb"></noscript>
            <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
              <dd id="pjuwb"></dd>
              <abbr id="pjuwb"></abbr>
              免费观看久久久4p| 亚洲国产岛国毛片在线| 一区二区在线观看视频| 国产日韩欧美自拍| 国产综合婷婷| 伊人夜夜躁av伊人久久| 亚洲黄一区二区三区| 一本一本久久| 小黄鸭精品aⅴ导航网站入口| 亚洲福利视频一区二区| 性色av一区二区三区| 久久免费视频网| 亚洲大胆人体在线| 日韩一级黄色大片| 香蕉久久夜色精品国产使用方法 | 欧美粗暴jizz性欧美20| 欧美激情女人20p| 国产精品一区一区| 尤物九九久久国产精品的特点| 男人的天堂亚洲| 欧美激情第9页| 国产精品腿扒开做爽爽爽挤奶网站| 久久riav二区三区| 一区二区三区精品| 国产欧美日韩不卡| 亚洲精品日本| 久久久久久久97| 日韩亚洲精品在线| 久久大逼视频| 欧美日韩一区二区精品| 亚洲电影免费| 翔田千里一区二区| 亚洲国产成人不卡| 欧美在线影院在线视频| 欧美日韩一区二区三区视频| 国产一区观看| 亚洲欧美成人综合| 亚洲高清在线视频| 久久国产欧美日韩精品| 国产精品vip| 99热这里只有精品8| 巨胸喷奶水www久久久免费动漫| 亚洲一区二区三区四区中文| 牛牛国产精品| 亚洲欧美国内爽妇网| 欧美日韩精品一区| 99re66热这里只有精品4| 蜜月aⅴ免费一区二区三区| 亚洲性视频网站| 欧美日韩一二区| 夜夜精品视频一区二区| 欧美国产日本高清在线| 久久精品国产久精国产一老狼| 久久av一区二区| 国产精品亚洲综合一区在线观看 | 亚洲欧美综合另类中字| 亚洲国产精品va| 久久在线免费| 在线电影国产精品| 久久九九热免费视频| 亚洲综合欧美| 欧美一区二区三区免费观看视频| 久久狠狠婷婷| 国产精品手机视频| 香蕉视频成人在线观看| 亚洲欧美成人一区二区在线电影| 久久免费99精品久久久久久| 国产精品盗摄久久久| 亚洲午夜精品在线| 亚洲欧美日韩一区二区三区在线| 久久精品观看| 黄色国产精品| 久久中文在线| 猛干欧美女孩| 夜夜嗨av一区二区三区四季av| 欧美亚洲三区| 欧美一区免费| 亚洲国产免费看| 日韩午夜黄色| 国产在线精品自拍| 亚洲欧洲一区二区三区在线观看| 亚洲国产第一页| 欧美激情视频一区二区三区在线播放| 欧美视频手机在线| 亚洲素人在线| 欧美一级片一区| 亚洲国产高清aⅴ视频| 亚洲激情在线激情| 国产精品入口福利| 欧美成年人网| 欧美视频免费在线| 欧美在线一级va免费观看| 久久综合给合久久狠狠狠97色69| 国产精品久久久久久久久婷婷 | 亚洲精品免费一二三区| 欧美日韩亚洲综合一区| 久久三级视频| 欧美色精品在线视频| 欧美一区二区三区视频在线| 久久在线精品| 久久都是精品| 欧美日韩一二三区| 久久中文欧美| 国产精品最新自拍| 亚洲欧洲精品一区| 好吊日精品视频| 国产精品99久久久久久久女警| 欧美成人激情在线| 亚洲一区3d动漫同人无遮挡| 久久国产日韩欧美| 午夜日本精品| 欧美区视频在线观看| 久久永久免费| 国产欧美另类| 亚洲视频导航| 在线视频你懂得一区| 看片网站欧美日韩| 久久久www免费人成黑人精品 | 亚洲自拍偷拍福利| 亚洲精选大片| 久久综合999| 久久久久久尹人网香蕉| 国产精品激情电影| 亚洲国产专区| 亚洲黄色成人| 久久综合九色综合网站| 久久精品盗摄| 国产日韩欧美亚洲| 午夜国产精品视频| 亚洲欧美综合网| 国产精品三级久久久久久电影| 久久精品导航| 国产精品一区二区你懂的| 亚洲精品在线免费| 亚洲美女中文字幕| 欧美国产亚洲另类动漫| 亚洲国产精品专区久久| 亚洲日本欧美日韩高观看| 亚洲精品影视| 黄色国产精品一区二区三区| 欧美wwwwww| 欧美亚洲视频| 久久黄色网页| 久久久噜噜噜久久| 国产日产欧美精品| 久久国产婷婷国产香蕉| 欧美成人高清视频| 亚洲美女精品成人在线视频| 欧美高清在线视频观看不卡| 亚洲日本va在线观看| 宅男精品导航| 国产精品永久免费在线| 久久不射网站| 欧美岛国激情| 一区二区不卡在线视频 午夜欧美不卡在 | 欧美在线免费看| 久久精品国产一区二区三| 国产亚洲电影| 欧美顶级艳妇交换群宴| 亚洲精品乱码久久久久久日本蜜臀| 欧美手机在线视频| 在线亚洲美日韩| 欧美在线看片a免费观看| 国模精品娜娜一二三区| 老司机一区二区| 99精品视频一区| 欧美一区二区三区男人的天堂| 欧美精品久久一区二区| 亚洲精品中文字幕在线| 欧美亚洲在线观看| 亚洲欧洲日本国产| 国产精品成人观看视频国产奇米| 美女被久久久| 日韩视频二区| 韩国久久久久| 欧美丝袜第一区| 久久尤物视频| 亚洲视频综合在线| 欧美成人一区二区| 午夜一区在线| 亚洲美女在线视频| 国产一区二区三区最好精华液| 亚洲激情网站免费观看| 欧美一区二区三区免费观看视频| 欧美精品国产一区| 亚洲一区二区在线免费观看| 久久网站免费| 亚洲一区视频在线| 亚洲国产精品激情在线观看| 国产精品久久久久久亚洲调教| 欧美sm重口味系列视频在线观看| 欧美日韩一区三区四区| 久久成人18免费观看| 在线视频精品一| 男男成人高潮片免费网站| 性xx色xx综合久久久xx| 日韩视频国产视频| 中文国产一区| 久久久精品日韩欧美| 一本久久a久久精品亚洲|