ããŒã1ïŒãããããã¯ãã«ãããã³åºæ¬åå
æå€§ã®ãããžã§ã¯ãã§äœ¿çšãããŠããææ°ã®3次å
ã²ãŒã ãšã³ãžã³ã¯ãæ°åŠãšããã°ã©ãã³ã°ã®åŸ®åŠãªçµã¿åããã§ãã å€ãã®ã²ãŒã ããã°ã©ãã¯ãããããå®å
šã«çè§£ããããšã¯éåžžã«é£ãããšèªããŠããŸãã ååãªçµéšïŒãŸãã¯ç§ã®ãããªå°éæè²ïŒããªãå Žåããã®ã¿ã¹ã¯ã¯ããã«é£ãããªããŸãã 3Dãšã³ãžã³ã°ã©ãã£ãã¯ã¹ã·ã¹ãã ã®åºæ¬ã玹ä»ããŸãã
ãã®ããŒãã§ã¯ããã€ã³ããšãã¯ãã«ãããã³ãããã«é¢é£ããè峿·±ããã¹ãŠãæ€èšããŸãã 代æ°ã®åºç€ïŒå€æ°ãšå€æ°ã®æ°åŠïŒãšã³ã³ãã¥ãŒã¿ãŒãµã€ãšã³ã¹ïŒãªããžã§ã¯ãæåèšèªã®åºç€ïŒãç¥ã£ãŠãããªãããã®èšäºãçè§£ã§ããŸãã ãã ããããã€ãã®ãããã¯ã¯éåžžã«è€éã«ãªãããšã«çæããŠãã ããã
åºæ¬åº§æšç³»
åºæ¬ããå§ããŸãããã 3次å
ã°ã©ãã£ãã¯ã¹ã«ã¯ã3次å
空éã®æŠå¿µãå¿
èŠã§ãã ã»ãšãã©ã®å Žåããã¹ãŠã®ã¿ã€ãã®ã¹ããŒã¹ã§ããã«ã«ã空éã䜿çšãããŸããããã«ããããã«ã«ã座æšã䜿çšã§ããŸãïŒæšæºè¡šèš
ïŒ X ã y ïŒ ã»ãšãã©ã®åŠæ ¡ã§ç ç©¶ãããŠãã2次å
ã°ã©ãã£ãã¯ã¹ïŒã
å€ãã®åŠçã®ç掻ã害ããåªã3次å
ãã«ã«ã空éã¯ãxãyãããã³z軞ãæäŸããŸãïŒæ°Žå¹³ãåçŽãããã³æ·±åºŠã®äœçœ®ãèšè¿°ïŒã ãã®ç©ºéå
ã®ä»»æã®ç¹ã®åº§æšã¯ãããã€ãã®æ°åãšããŠæå®ãããŸãïŒãã®å Žåã3ã€ã®è»žãããããã3ã€ã®æ°åã§ãïŒã 2次å
å¹³é¢ã§ã¯ããšã³ããªã¯
ïŒ X ã y ïŒ ãããã³3次å
空é-ãšããŠ
ïŒ X ã y ã z ïŒ ã ãã®ãšã³ããªïŒ
tuple ïŒã¯ãã¹ããŒã¹ã®éå§ç¹ïŒéåžžã¯
ïŒ 0 ã0 ã0 ïŒ ã
ãã³ãïŒã¿ãã«ã¯ãã³ã³ãã¥ãŒã¿ãŒãµã€ãšã³ã¹ãŸãã¯æ°åŠã®èŠçŽ ã®é åºä»ããªã¹ãïŒãŸãã¯ã·ãŒã±ã³ã¹ïŒã§ãã ããã¯èšé²ã§ã
ïŒ K ã y ã l ã e ïŒ ç§ã®ååãæ§æããæåã®ã·ãŒã±ã³ã¹ã瀺ã4èŠçŽ ã®ã¿ãã«ã«ãªããŸãã

ãã®ç©ºéã§ã¯ããã€ã³ãã3ã€ã®èŠçŽ ã®ã¿ãã«ãšããŠå®çŸ©ããŸãã ããã¯æ¬¡ã®ããã«èª¬æã§ããŸãã
P = ïŒ x ã y ã z ïŒ
ãã€ã³ããèšå®ããããšã«å ããŠããã®éšåãæ±ºå®ããå¿
èŠããããŸãã
ã¿ãã«ã®åèŠçŽ ã¯ã
åºåºãã¯ãã«ã«æ²¿ã£ãäœçœ®ã決å®ãã
ã¹ã«ã©ãŒæ°ã§ãã ååºåºãã¯ãã«ã«ã¯åäœé·ïŒãã®é·ãã¯1ïŒãå¿
èŠã§ããã€ãŸããæ¬¡ã®ãããªã¿ãã«ã§ãã
ïŒ 1 ã1 ã1 ïŒ ãããŠ
ïŒ 2 ã2 ã2 ïŒ é·ããããããããŒã¹ãã¯ãã«ã«ããããšã¯ã§ããŸããã
空éã«3ã€ã®åºåºãã¯ãã«ãå®çŸ©ããŸãã
beginalignedXïŒ=ïŒ1,0,0ïŒYïŒ=ïŒ0,1,0ïŒZïŒ=ïŒ0,0,1ïŒ endaligned
åºå
žïŒhttp://www.thefullwiki.org/Arithmetics/Cartesian_Coordinateã
座æšç³»
次ã«ã座æšç³»ã®æ°åŠçå®çŸ©ãã°ã©ãã£ãã¯ã¹ã·ã¹ãã ãžã®åœ±é¿ãããã³å®è¡å¯èœãªèšç®ã«ã€ããŠèª¬æããŸãã
ãã€ã³ãæå®
座æšç³»
ã®åç¹ã¯ç¹ã§ç€ºãããŸã
O ã3ã€ã®èŠçŽ ã®ã¿ãã«ïŒ0,0,0ïŒã§èšè¿°ãããŸãã ã€ãŸãã座æšç³»ã®æ°åŠç衚çŸã¯æ¬¡ã®ããã«è¡šçŸã§ããŸãã
\ {O; XãYãZ \}
\ {O; XãYãZ \}
ãã®ãšã³ããªã䜿çšãããšã
ïŒxãyãzïŒ åç¹ã«å¯Ÿããç¹ã®äœçœ®ã衚ããŸãã ãã®ãããªå®çŸ©ã¯ã
P ã
ïŒaãbãcïŒ æ¬¡ã®ããã«è¡šãããšãã§ããŸãã
P=O+aX+bY+cZ
ããããã¯ãã¹ã«ã©ãŒå€ãå°æåã§ããã¯ãã«ã倧æåã§ç€ºããŸãã
a ã
b ãããŠ
c ã¹ã«ã©ãŒã§ããã
X ã
Y ãããŠ
Z -ãã¯ãã«ã ïŒå®éããããã¯äžèšã§å®çŸ©ããåºæ¬çãªãã¯ãã«ã§ããïŒ
ããã¯ãã¿ãã«ïŒ2,3,4ïŒã«ãã£ãŠèšé²ããããã€ã³ããæ¬¡ã®ããã«è¡šçŸã§ããããšãæå³ããŸãã
beginalignedïŒ2,3,4ïŒïŒ=ïŒ2,0,0ïŒ+ïŒ0,3,0ïŒ+ïŒ0,0,4ïŒïŒ=ïŒ0,0,0ïŒ+ïŒ2,0,0ïŒ+ïŒ0,3,0ïŒ+ïŒ0,0,4ïŒïŒ=ïŒ0,0,0ïŒ+2ïŒ1,0,0ïŒ+3ïŒ0,1ã0ïŒ+4ïŒ0,0,1ïŒïŒ=O+2X+3Y+4Z endaligned
ããã§ãã3次å
空éã®ãã€ã³ãããšããæœè±¡æŠå¿µãæ¡çšãã4ã€ã®ãªããžã§ã¯ãã®åèšãšããŠå®çŸ©ããŸããã ãã®ãããªå®çŸ©ã¯ãã³ãŒãã§æŠå¿µãå®è£
ããéã«éåžžã«éèŠã«ãªããŸãã
çžäºåçŽæ§
䜿çšãã座æšç³»ã«ã¯éåžžã«äŸ¡å€ã®ããç¹æ§ããããŸããããã¯
çžäºåçŽæ§ã§ãã ããã¯ãããããã®å¹³é¢äžã®å軞ã®äº€ç¹ã§ããããã®éã®è§åºŠã90床ã§ããããšãæå³ããŸãã

座æšç³»ã¯ãæ£ããããšãåŒã°ããŸãã
ãœãŒã¹ïŒ http : //viz.aset.psu.edu/gho/sem_notes/3d_fundamentals/html/3d_coordinates.htmlæ°åŠã®èšèªã§ã¯ãããã¯æ¬¡ã®ããšãæå³ããŸãã
X=Y\åZ
ã©ãã§
\å ã¯ãã¯ãã«ç©æŒç®åã瀺ããŸãã
ãã¯ãã«ç©ã¯ã次ã®åŒã§å®çŸ©ã§ããŸãïŒ3ã€ã®èŠçŽ ã®2ã€ã®ã¿ãã«ãããå ŽåïŒã
ïŒaãbãcïŒ timesïŒdãeãfïŒ=ïŒbfâceãcdâafãaeâbdïŒ
ãããã®åŒã¯éå±ã«èŠãããããããŸããããåŸã§å€ãã®ç°ãªãèšç®ãšå€æãå®è¡ãããããªããŸãã 幞ããªããšã«ãã²ãŒã ãšã³ãžã³ãäœæãããšããããããã¹ãŠã®æ¹çšåŒãèŠããå¿
èŠã¯ãããŸããããããã®åŒããå§ããŠããã®äžã«ããã»ã©è€éã§ãªãã·ã¹ãã ãæ§ç¯ã§ããŸãã å°ãªããšãããšã³ãžã³ã®åºæ¬çãªäœãã倿ŽãããŸã§ã¯ïŒ
ããããšãã¯ãã«
座æšç³»ã®åºæ¬ã決å®ãããããã€ã³ããšãã¯ãã«ã«ã€ããŠããããŠããã«éèŠãªããšã«ã¯ãããããäºãã«ã©ã®ããã«çžäºäœçšãããã«ã€ããŠè©±ãåãããšãã§ããŸãã ãŸãããã€ã³ããšãã¯ãã«ã¯å®å
šã«ç°ãªããªããžã§ã¯ãã§ããããšã«æ³šæãã䟡å€ããããŸãããã€ã³ãã¯ç©ºéå
ã®ç©ççãªå Žæã§ããããã¯ãã«ã¯2ã€ã®ãã€ã³ãéã®ç©ºéã§ãã

ãããã®2çš®é¡ã®ãªããžã§ã¯ããæ··åããªãããã«ããã€ã³ããæäœã§å€§æåã§æžããŸããããšãã°ã
P ãããã³ãã¯ãã«-倪åã®å€§æåã§ãããšãã°
mathbfV ã
ç¹ãšãã¯ãã«ãæ±ãå Žåã2ã€ã®äž»èŠãªå
¬çã䜿çšããŸãã ããã«ãããŸãïŒ
- å
¬ç1ïŒ2ç¹éã®å·®ã¯ãã¯ãã«ãã€ãŸã mathbfV=PâQ
- å
¬ç2ïŒç¹ãšãã¯ãã«ã®åèšã¯ç¹ã§ãã Q=P+ mathbfV
ãã³ãïŒ å
¬çãšã¯ã蚌æ ãªãã«åãå
¥ããããã»ã©ååã«æçœã§ãããšèããããè«ççèšè¿°ã§ãã
ãšã³ãžã³äœæ
ããã2ã€ã®å
¬çã®ãããã§ã
Point
ã¯ã©ã¹ãš
Vector
ã¯ã©ã¹ãšãã3次å
ã²ãŒã ãšã³ãžã³ã®å¿èéšã§ãããããªãã¯ãã¯ã©ã¹ãäœæããã®ã«ååãªæ
å ±ããããŸãã ãã®æ
å ±ã«åºã¥ããŠç¬èªã®ãšã³ãžã³ãäœæããå Žåããããã®ã¯ã©ã¹ãäœæãããšãã«ä»ã®éèŠãªæé ãå®è¡ããå¿
èŠããããŸãïŒäž»ã«æ¢åã®APIã®æé©åãšæäœã«é¢é£ããŸãïŒããç°¡ç¥åã®ããã«ãããçç¥ããŸãã
ã¯ã©ã¹ã®äŸã¯ãã¹ãŠæ¬äŒŒã³ãŒãã§èšè¿°ãããããããæ°ã«å
¥ãã®èšèªã§å®è£
ã§ããŸãã 2ã€ã®ã¯ã©ã¹ã®ã¹ã±ãããæ¬¡ã«ç€ºããŸãã
Point Class { Variables: num tuple[3];
Vector Class { Variables: num tuple[3];
æŒç¿ãšããŠããããã®ã¯ã©ã¹ã®å颿°ã«ïŒäžèšã§èª¬æããå
容ã«åºã¥ããŠïŒäœæ¥ã³ãŒãã远å ããŠã¿ãŠãã ããã ãããå®äºããããæ¬¡ã®ç°¡åãªããã°ã©ã ãå®è¡ããŠäœæ¥ããã¹ãããŸãã
main { var point1 = new Point(1,2,1); var point2 = new Point(0,4,4); var vector1 = new Vector(2,0,0); var vector2; point1.drawPoint();
ãããã«
æåã®ããŒãã¯çµãããŸããïŒ ããã§ã¯ã2ã€ã®ã¯ã©ã¹ãèšè¿°ããããã ãã«å€ãã®æ°åŠã䜿çšãããŠããããã§ãããå®éã¯ããã§ãã ã»ãšãã©ã®å Žåããã®ã¬ãã«ã§ã²ãŒã ãæäœããå¿
èŠã¯ãããŸããããã²ãŒã ãšã³ãžã³ã®å
éšåäœã®è©³çްãç¥ãããšã¯ïŒå°ãªããšãããªãèªèº«ã®åã³ã®ããã«ïŒäŸç¶ãšããŠæçšã§ãã
ããŒã2ïŒç·åœ¢å€æ
次ã«ãå転ãã¹ã±ãŒã«ãªã©ã®ãã¯ãã«ã®ããããã£ã倿Žã§ãã
ç·åœ¢å€æã«ã€ããŠèª¬æããŸãã ãã§ã«äœæããã¯ã©ã¹ã«ããããé©çšããæ¹æ³ãåŠã³ãŸãã
ç·åœ¢å€æã«ã€ããŠèª¬æããã«ã¯ãPointã¯ã©ã¹ãå°ã倿Žããå¿
èŠããããŸããã³ã³ãœãŒã«ã«ããŒã¿ãåºåãã代ããã«ã䟿å©ãªã°ã©ãã£ãã¯APIã䜿çšããŠã颿°ãç»é¢ã«çŸåšã®ãã€ã³ããæç»ããããã«ããŸãã
ç·åœ¢å€æã®åºæ¬
åãªãèŠåã§ããç·åœ¢å€æã®æ¹çšåŒã¯ãå®éããããã£ãšè€éã«èŠããŸãã äžè§æ³ã䜿çšããŸãããäžè§æ³æŒç®ã®å®è¡
æ¹æ³ãå®éã«ç¥ãå¿
èŠã¯ãããŸãããå颿°ã«æž¡ãå¿
èŠããããã®ãšãã®é¢æ°ããåãåããã®ã説æããŸãããŸããäžéã¢ã¯ã·ã§ã³ã«ã€ããŠã¯ãé»åãŸãã¯æ°åŠã©ã€ãã©ãªã䜿çšã§ããŸãã
ãã³ãïŒãããã®æ¹çšåŒã®å
éšåäœãããæ·±ãçè§£ãããå Žåã¯ã
ãã®ãããªã
èŠãŠ ã
ãã®PDFã
èªãã§ãã ãã ã
ãã¹ãŠã®ç·åœ¢å€æã¯æ¬¡ã®åœ¢åŒãåããŸãã
B=FïŒAïŒ
ãã®ããšããã倿æ©èœãããããšãæããã§ã
FïŒïŒ ããã¯ãã«ã¯å
¥åãšããŠäœ¿çšãããŸã
A ãåºåã§ãã¯ãã«ãååŸããŸã
B ã
ãããã®åéšåïŒ2ã€ã®ãã¯ãã«ãšé¢æ°ïŒã¯ãè¡åãšããŠè¡šãããšãã§ããŸãããã¯ãã«
B -1x3è¡åãšããŠããã¯ãã«
A -å¥ã®1x3è¡åãããã³ç·åœ¢å€æãšããŠ
FïŒïŒ -3x3
ãããªãã¯ã¹ ïŒ
倿ãããªãã¯ã¹ ïŒãšããŠã
ã€ãŸããæ¹çšåŒãå±éãããšã次ã®ããã«ãªããŸãã
beginbmatrixb0b1b2 endbmatrix= beginbmatrixf00ïŒf01ïŒf02f10ïŒf11ïŒf12f20ïŒf21ïŒf22 endbmatrix beginbmatrixa0a1 a2 endbmatrix
äžè§æ³ãç·åœ¢ä»£æ°ãçµãå Žåããã§ã«è¡åæŒç®ã®æªå€¢ãæãåºããããããŸããã 幞ããªããšã«ããã®åŒãæžããŠã»ãšãã©ã®åé¡ãåãé€ãç°¡åãªæ¹æ³ããããŸãã æ¬¡ã®ããã«ãªããŸãã
beginbmatrixb0b1b2 endbmatrix= beginbmatrixf00a0+f01a1+f02a2f10a0+f11a1+f12a2f20a0+f21a1+f22a2 endbmatrix
ãã ãããã¯ãã«ãšãã®å転éãæå®ããå¿
èŠãããå Žåãå転ã®å Žåã®ããã«ããããã®æ¹çšåŒã¯å
¥åããŒã¿ã®2çªç®ã®ãœãŒã¹ã®ååšäžã§å€åããå¯èœæ§ããããŸãã ã¿ãŒã³ã®ä»çµã¿ãèŠãŠã¿ãŸãããã
ã¿ãŒã³
å®çŸ©äžãå転ãšã¯ãã¿ãŒãã³ã°ãã€ã³ããäžå¿ãšãããªããžã§ã¯ãã®åéåã§ãã 空éã®ãããããã€ã³ãã¯ãXYå¹³é¢ãXZå¹³é¢ããŸãã¯YZå¹³é¢ã«å±ããããšãã§ããŸãïŒåå¹³é¢ã¯ãæåã®éšåã§èª¬æãã2ã€ã®åºåºãã¯ãã«ã§æ§æãããŸãïŒã

3ã€ã®ãããããã€ã³ãã¯ã3ã€ã®ç¬ç«ããå転è¡åãããããšãæå³ããŸãã
XYå転è¡åïŒ
beginbmatrixcos thetaïŒâsin thetaïŒ0sin thetaïŒcos thetaïŒ00ïŒ0ïŒ1 endbmatrix
XZå転è¡åïŒ
beginbmatrixcos thetaïŒ0ïŒsin theta0ïŒ1ïŒ0âsin thetaïŒ0ïŒcos theta endbmatrix
YZå転è¡åïŒ
beginbmatrix1ïŒ0ïŒ00ïŒcos thetaïŒâsin theta0ïŒsin thetaïŒcos theta endbmatrix
ã€ãŸãããã€ã³ããå転ããã
A XYå¹³é¢ã®åšãã«90床ïŒ
pi/2 ã©ãžã¢ã³-ã»ãšãã©ã®æ°åŠã©ã€ãã©ãªã«ã¯ã床ãã©ãžã¢ã³ã«å€æããæ©èœããããŸãïŒãæ¬¡ã®æé ãå®è¡ããå¿
èŠããããŸãã
beginaligned beginbmatrixb0b1b2 endbmatrixïŒ= beginbmatrixcos frac pi2ïŒâsin frac pi2ïŒ0sin frac pi2ïŒcos frac pi2ïŒ00ïŒ0ïŒ1 endbmatrix beginbmatrixa0a1a2 endbmatrixïŒ= beginbmatrixcos frac pi2a0+âsin frac pi2a1+0a2sin frac pi2a0+cos frac pi2a1+0a20a0+0a1+1a2 endbmatrixïŒ= beginbmatrix0a0+â1a1+0a21a0+0a1+0a20a0+0a1+1a2 endbmatrixïŒ= beginbmatrixâa1a0a2 endbmatrix endaligned
ã€ãŸããåºçºç¹ã
A 座æšãæã£ãŠãã
ïŒ3,4,5ïŒ ãã®åŸãåºå£ç¹
B 座æšãæã€ããšã«ãªããŸã
ïŒâ4,3,5ïŒ ã
æŒç¿ïŒé¢æ°ã®å転
ç·Žç¿ãšããŠã
Vector
ã¯ã©ã¹ã®3ã€ã®æ°ãã颿°ãäœæããŠã¿ãŠãã ããã 1ã€ã¯ãã¯ãã«ãXYå¹³é¢ã®åšãã«å転ããããã1ã€ã¯YZã®åšãã«å転ããã3çªç®ã¯XZã®åšãã«å転ãããŸãã å
¥åã§ã¯ã颿°ã¯ç®çã®å転æ°ãåãåããåºåã§ã¯ãã¯ãã«ãè¿ãå¿
èŠããããŸãã
äžè¬çã«ã颿°ã¯æ¬¡ã®ããã«æ©èœããŸãã
- åºåãã¯ãã«ãäœæããŸãã
- 床åäœã®å
¥åãã©ãžã¢ã³ã«å€æããŸãã
- äžèšã®æ¹çšåŒã䜿çšããŠãåºåãã¯ãã«ã®ã¿ãã«ã®åèŠçŽ ãè§£ããŸãã
- åºåãã¯ãã«ãè¿ããŸãã
ã¹ã±ãŒãªã³ã°
ã¹ã±ãŒãªã³ã°ã¯ãæå®ãããã¹ã±ãŒã«ã«åŸã£ãŠãªããžã§ã¯ããæ¡å€§ãŸãã¯çž®å°ãã倿ã§ãã
ãã®å€æã¯éåžžã«ç°¡åã§ãïŒå°ãªããšãã¿ãŒã³ãšæ¯èŒããŠïŒã ã¹ã±ãŒãªã³ã°å€æã«ã¯ã
å
¥åãã¯ãã«ãšã空éã®åè»žã«æ²¿ã£ãå
¥åãã¯ãã«ã®ã¹ã±ãŒã«ã決å®ãã
3ã€ã®èŠçŽ ã®ã¹ã±ãŒãªã³ã°ã¿ãã«ãšãã2çš®é¡ã®å
¥åããŒã¿ãå¿
èŠã§ãã
ããšãã°ããºãŒã ã¿ãã«ã§ã¯
ïŒs0ãs1ãs2ïŒ äŸ¡å€
s0 x軞ã®ã¹ã±ãŒã«ã衚ãã
s1 -yè»žã«æ²¿ã£ãŠã
s2 -Zè»žã«æ²¿ã£ãŠã
ã¹ã±ãŒã«å€æè¡åã®åœ¢åŒã¯æ¬¡ã®ãšããã§ãïŒããã§ã
s0 ã
s1 ãããŠ
s2 ã¹ã±ãŒãªã³ã°ã®ã¿ãã«ã®èŠçŽ ã§ãïŒïŒ
beginbmatrixs0ïŒ0ïŒ00ïŒs1ïŒ00ïŒ0ïŒs2 endbmatrix
å
¥åãã¯ãã«Aãäœæããã«ã¯
ïŒa0ãa1ãa2ïŒ x軞ã®2åïŒã€ãŸããã¿ãã«ã䜿çš
S=ïŒ2ã1ã1ïŒ ïŒãèšç®ã®åœ¢åŒã¯æ¬¡ã®ãšããã§ãã
beginaligned beginbmatrixb0b1b2 endbmatrixïŒ= beginbmatrixs0ïŒ0ïŒ00ïŒs1ïŒ00ïŒ0ïŒs2 endbmatrix beginbmatrixa0a1a2 endbmatrixïŒ= beginbmatrix2ïŒ0ïŒ00ïŒ1ïŒ00ïŒ0ïŒ1 endbmatrix beginbmatrixa0a1a2 endbmatrixïŒ= beginbmatrix2a0+0a1+0a20a0+1a1+0a20a0+0a1+1a2 endbmatrixïŒ= beginbmatrix2a0a1a 2 e n d b m a t r i x e n d a l i g n e d
ã€ãŸããå
¥åãã¯ãã«ã§
A = ïŒ 3 ã4 ã0 ïŒ åºåãã¯ãã«
B çãããªããŸã
ïŒ 6 ã4 ã0 ïŒ ã

æŒç¿ïŒãºãŒã æ©èœ
å¥ã®æŒç¿ãšããŠãVectorã¯ã©ã¹ã«æ°ãã颿°ã远å ããŸãã ãã®æ°ãã颿°ã¯ã¹ã±ãŒãªã³ã°ã¿ãã«ãåãåããåºåãã¯ãã«ãè¿ãå¿
èŠããããŸãã
äžè¬ã«ã颿°ã¯æ¬¡ã®ããã«æ©èœããã¯ãã§ãã
- åºåãã¯ãã«ãäœæããŸãã
- äžèšã®æ¹çšåŒïŒ
y0 = x0 * s0; y1 = x1*s1; y2 = x2*s2
ç°¡ç¥åã§ããŸãïŒã䜿çšããåºåãã¯ãã«ã®ã¿ãã«ã®åèŠçŽ ã®è§£ã - åºåãã¯ãã«ãè¿ããŸãã
äœããäœããŸãããïŒ
èªç±ã«ç·åœ¢å€æãã§ããããã«ãªã£ãã®ã§ãæ°ããæ©èœã瀺ãå°ããªããã°ã©ã ãäœæããŸãããã ç»é¢äžã«ãã€ã³ãã®ã°ã«ãŒããæç»ããããããå
šäœãšããŠå€æŽããç·åœ¢å€æãå®è¡ã§ããããã°ã©ã ãäœæããŸãã
å§ããåã«ã
Point
ã¯ã©ã¹ã«å¥ã®é¢æ°ã远å ããå¿
èŠããããŸãã ããã
setPointToPoint()
ãšåŒã³ãåã«æž¡ããããã€ã³ãã«çŸåšã®ãã€ã³ãã®äœçœ®ãèšå®ããŸãã å
¥ãå£ã§ã圌女ã¯ãã€ã³ããåãåããäœãè¿ããŸããã
ããã°ã©ã ã®ç°¡åãªç¹åŸŽã次ã«ç€ºããŸãã
- ããã°ã©ã ã¯ã100ãã€ã³ããé
åã«ä¿åããŸãã
- DããŒãæŒããšãããã°ã©ã ã¯çŸåšã®ç»é¢ãã¯ãªã¢ãããã€ã³ããåæç»ããŸãã
- AããŒãæŒããšãããã°ã©ã ã¯ãã¹ãŠã®ãã€ã³ãã®äœçœ®ã0.5åã«ããŸãã
- SããŒãæŒããšãããã°ã©ã ã¯ãã¹ãŠã®ãã€ã³ãã®äœçœ®ã2.0åã«ããŸãã
- RããŒãæŒããšãXYå¹³é¢äžã§ãã¹ãŠã®ãã€ã³ãã®äœçœ®ã15床å転ããŸãã
- EscapeããŒãæŒããšãããã°ã©ã ãéããŸãïŒJavaScriptãŸãã¯å¥ã®Webæåèšèªã§èšè¿°ããªãå ŽåïŒã
ç§ãã¡ãæã£ãŠããã¯ã©ã¹ã¯æ¬¡ã®ãšããã§ãã
Point Class { Variables: num tuple[3];
äžããããèŠä»¶ã§ã³ãŒããã©ã®ããã«èŠãããèŠãŠã¿ãŸãããïŒ
main{
ããã§ãç§ãã¡ã¯ãã¹ãŠã®æ°ããæ©èœã瀺ãçãè¯ãããã°ã©ã ãæã«å
¥ããŸããïŒ
ãããã«
ãã¹ãŠã®å¯èœãªç·åœ¢å€æãæ€èšããããã§ã¯ãããŸãããããã€ã¯ãã¢ãŒã¿ãŒã¯åœ¢ã«ãªãå§ããŠããŸãã
ãã€ãã®ããã«ãç°¡åã«ããããã«ããšã³ãžã³ããããã€ãã®ãã®ïŒã€ãŸããç§»åãšåå°ïŒãåé€ããŸããã ããã2ã€ã®ã¿ã€ãã®ç·åœ¢å€æã«ã€ããŠè©³ããç¥ãããå Žåã¯ã
Wikipediaã®èšäºãš
èšäºå
ã®ãªã³ã¯ãåç
§ããŠãã ããã
次ã®ããŒãã§ã¯ãç¯å²å€ã®ããŸããŸãªè¡šç€ºã¹ããŒã¹ãšã¯ãªããã³ã°ãªããžã§ã¯ãã«ã€ããŠæ€èšããŸãã
ããŒã3ïŒã¹ããŒã¹ãšã¯ãªããã³ã°
ç¬èªã«äœæãã2ã€ã®ã¯ã©ã¹ã®äœ¿çšã¯ããªãè€éãªããã»ã¹ã§ãããããã«ãå¯èœãªåãã€ã³ããæç»ãããšã·ã¹ãã ã¡ã¢ãªãããã«äœ¿ãæããããããšãããããŸãã ãããã®åé¡ã解決ããããã«ãã²ãŒã ãšã³ãžã³ã«æ°ããã¯ã©ã¹ã远å ããŸãïŒ
ã«ã¡ã© ã
ã¬ã³ããªã³ã°ã¯ã«ã¡ã©å
ã§ã®ã¿è¡ããããã¹ãŠã®ãªããžã§ã¯ããç»é¢ãµã€ãºã«åãããŠ
åãåã ããã¹ãŠã®ãã€ã³ããå¶åŸ¡ããŸãã
ããããããããã¹ãŠãå§ããåã«ãã¯ãªããã³ã°ã«ã€ããŠè©±ãå§ããå¿
èŠããããŸãã
ã¯ãªããã³ã°
å®çŸ©äžãã¯ãªããã³ã°ã¯ããªããžã§ã¯ãã®ãã倧ããªã°ã«ãŒãããã®ãªããžã§ã¯ãã®éžæã§ãã ã²ãŒã ãšã³ãžã³ã§ã¯ãå°ããªã°ã«ãŒããç»é¢ã«æç»ããå¿
èŠããããã€ã³ãã«ãªããŸãã ãªããžã§ã¯ãã®å€§ããªã°ã«ãŒãã¯ãæ¢åã®ãã¹ãŠã®ãã€ã³ãã®ã»ããã«ãªããŸãã
ã¯ãªããã³ã°ã®ãããã§ããšã³ãžã³ã¯ã·ã¹ãã ã¡ã¢ãªã®æ¶è²»ã倧å¹
ã«åæžããŸãã 圌ã¯ãã¬ã€ã€ãŒãèŠãããšãã§ãããã®ã ããæãããã€ã³ãã®å
šäžçãæããŸããã ãšã³ãžã³ã§ã¯
ã衚瀺ã¹ããŒã¹ã®ãã©ã¡ãŒã¿ãŒãèšå®ããŠãããå®è£
ããŸãã
衚瀺ã¹ããŒã¹ã¯ãxãyãzã®3ã€ã®åŸæ¥ã®è»žãã¹ãŠã«æ²¿ã£ãŠå®çŸ©ãããŸãã xã®å¢çç·ã¯ããŠã£ã³ããŠã®å·Šå³ã®å¢çç·ã®éã®ãã¹ãŠãyã®å¢çç·-ãŠã£ã³ããŠã®äžäžã®å¢çç·ã®éã®ãã¹ãŠããæ§æãããzã®å¢çç·ã¯
0
ïŒã«ã¡ã©ãã€ã³ã¹ããŒã«ãããŠããïŒãããã¬ãŒã€ãŒã®å¯èŠè·é¢ïŒãã¢ã§ã¯ïŒä»»æã«éžæããå€
100
ã䜿çšããŸãïŒã
ãã€ã³ããã¬ã³ããªã³ã°ããåã«ãã«ã¡ã©ã¯ã©ã¹ã¯ãã€ã³ãã衚瀺ã¹ããŒã¹ã«ãããã©ããã確èªããŸãã ããã§ããå Žåããã€ã³ããæç»ãããããã§ãªãå Žåã¯æç»ãããŸããã
ãã¶ããã«ã¡ã©ã远å ããæã§ããïŒ
ã¯ãªããã³ã°ã®åºæ¬ãçè§£ããããã«ã¡ã©ã¯ã©ã¹ãäœæã§ããŸãã
Camera Class { Vars: int minX, maxX;
ãŸãããšã³ãžã³ã§ã¬ã³ããªã³ã°ããããã»ã¹å
šäœãã«ã¡ã©ã«é
眮ããŸãã å€ãã®å Žåããšã³ãžã³ã§ã¯ãã¬ã³ãã©ãŒã¯ã«ã¡ã©ã·ã¹ãã ããåé¢ãããŠããŸãã äžéšã®ãšã³ãžã³ã§ã¯ãã·ã¹ãã ãäžç·ã«æ ŒçŽãããšæ··ä¹±ãçãããããããã¯éåžžãã«ãã»ã«åã·ã¹ãã ã®å©äŸ¿æ§ã®ããã«è¡ãããŸãã ãã ãããã¥ãŒããªã¢ã«ã§ã¯ãããããåäžã®ã·ã¹ãã ãšããŠæ±ãæ¹ãç°¡åã§ãã
ãŸããã·ãŒã³ãæç»ããããã«ã¯ã©ã¹ã®å€éšããåŒã³åºãããšãã§ãã颿°ãå¿
èŠã§ãã ãã®é¢æ°ã¯ãæ¢åã®ãã¹ãŠã®ãã€ã³ãã埪ç°ããããããã«ã¡ã©ã®ã¯ãªããã³ã°ãã©ã¡ãŒã¿ãŒãšæ¯èŒããæ¡ä»¶äžã§ããããæç»ããŸãã
ãœãŒã¹ïŒ http : //en.wikipedia.org/wiki/File : ViewFrustum.svgãã³ãïŒã«ã¡ã©ã·ã¹ãã ãã¬ã³ãã©ãŒããåé¢ããå Žåã¯ã
Renderer
ã¯ã©ã¹ãäœæããã«ã¡ã©ã·ã¹ãã ã§ãã€ã³ããåãåããé
åã«æç»ããå¿
èŠããããã®ãä¿åããã¬ã³ãã©ãŒã®render
draw()
颿°ã«é
åãéä¿¡ããŸãã
ãã€ã³ã管ç
ã«ã¡ã©ã¯ã©ã¹ã®æåŸã®éšåã¯ããã€ã³ã管çã·ã¹ãã ã§ãã 䜿çšããããã°ã©ãã³ã°èšèªã«å¿ããŠãããã¯åã«ã¬ã³ããªã³ã°çšã®ãã¹ãŠã®ãªããžã§ã¯ãã®é
åïŒåŸã§ãã€ã³ãã ãã§ãªãåŠçããŸãïŒã«ãªãããããã©ã«ãã§ãªããžã§ã¯ãã®èŠªã¯ã©ã¹ã®äœ¿çšãå¿
èŠã«ãªãå ŽåããããŸãã éžæãéåžžã«äžéãªå Žåã¯ããªããžã§ã¯ãã®èŠªã¯ã©ã¹ãç¬èªã«å®è£
ããã¬ã³ããªã³ã°ããããã¹ãŠã®ã¯ã©ã¹ïŒãããŸã§ã¯åãªããããïŒããã®ã¯ã©ã¹ãç¶æ¿ããããã«ããå¿
èŠããããŸãã
å¶åŸ¡ã·ã¹ãã ãã¯ã©ã¹ã«è¿œå ãããšãã«ã¡ã©ã¯æ¬¡ã®ããã«ãªããŸãã
Camera Class { Vars: int minX, maxX;
ããããã¹ãŠã®è¿œå ãè¡ã£ãã®ã§ãæåŸã®éšåã§æžãããããã°ã©ã ãå°ãæ¹åããŸãããã
倧ãããŠè¯ã
æåŸã®ããŒãã§äœæããããã°ã©ã äŸã«åºã¥ããŠãç°¡åãªãã€ã³ãã¬ã³ããªã³ã°ããã°ã©ã ãäœæããŸãã
ããã°ã©ã ã®ãã®å埩ã§ã¯ãæ°ããã«ã¡ã©ã¯ã©ã¹ã®äœ¿çšã远å ããŸãã
DããŒãæŒããšãããã°ã©ã ã¯ã¯ãªããã³ã°ããã«ç»é¢ãåæç»ããç»é¢ã®å³äžé
ã«ã¬ã³ããªã³ã°ããããªããžã§ã¯ãã®æ°ã衚瀺ããŸãã
CããŒãæŒããšãããã°ã©ã ã¯ã¯ãªããã³ã°ç»é¢ãåæç»ããã¬ã³ããªã³ã°ããããªããžã§ã¯ãã®æ°ã衚瀺ããŸãã
ã³ãŒããèŠãŠã¿ãŸãããã
main{
ããã§ãã¯ãªããã³ã°ã®ãã¹ãŠã®åãèªåã®ç®ã§èŠãããšãã§ããŸãïŒãµã³ãã«ã³ãŒãã§ã¯ããã¢ã®Webäºææ§ãé«ããããã«ããã€ãã®å®è£
ãå°ãç°ãªãããšã«æ³šæããŠãã ããã
ãããã«
ã«ã¡ã©ãšã¬ã³ããªã³ã°ã·ã¹ãã ãäœæããã®ã§ãæè¡çã«ã¯æ¢è£œã®3次å
ã²ãŒã ãšã³ãžã³ããããšèšããŸãã圌ã¯ããŸãå°è±¡çã§ã¯ãããŸãããããã¹ãŠã«æéããããŸããæ¬¡ã®ããŒãã§ã¯ããšã³ãžã³ã«å¹ŸäœåŠçå³åœ¢ïŒã€ãŸããç·åãšåïŒã远å ããæ¹æ³ãåŠç¿ãããããã®æ¹çšåŒãç»é¢ãã¯ã»ã«ã«é©çšããããã«äœ¿çšã§ããã¢ã«ãŽãªãºã ã«ã€ããŠèª¬æããŸããããŒã4ïŒç·åãšåã®ã©ã¹ã¿ã©ã€ãº
ã©ã¹ã¿ã©ã€ãº
ã©ã¹ã¿ã©ã€ãºã¯ããã¯ã¿ãŒã°ã©ãã£ãã¯åœ¢åŒïŒãŸãã¯ãã®å Žåã¯æ°åŠçã«ïŒã§èšè¿°ããããã©ãŒã ããïŒãã©ãŒã ããã¯ã»ã«æ§é ã«é©åããïŒã©ã¹ã¿ã€ã¡ãŒãžã«å€æããããã»ã¹ã§ããæ°åŠã¯ã³ã³ãã¥ãŒã¿ã°ã©ãã£ãã¯ã¹ã«å¿
èŠãªã»ã©æ£ç¢ºã§ã¯ãªãå Žåããããããã¢ã«ãŽãªãºã ã䜿çšããŠããããèšè¿°ããç»é¢ãæŽæ°ã¹ã¯ãªãŒã³ã«é©åãããå¿
èŠããããŸããããšãã°ãæ°åŠã§ã¯ããã€ã³ãã¯åº§æšå
ã«ããå ŽåããããŸãïŒ3.2 ã4.6 ïŒããã¬ã³ããªã³ã°ã¯ããããç§»åãããå¿
èŠããããŸãïŒ3 ã5 ïŒã衚瀺ç»çŽ æ§é ã«åãããã«ããŸãããã©ãŒã ã®åã¿ã€ãã«ã¯ãç¬èªã®ã©ã¹ã¿ã©ã€ãºã¢ã«ãŽãªãºã ããããŸããã©ã¹ã¿ã©ã€ãºããæãåçŽãªãã©ãŒã ãã©ã€ã³ã»ã°ã¡ã³ãããå§ããŸãããã
ç·å
åºå
žïŒhttp : //en.wikipedia.org/wiki/File : Bresenham.svg
ç·åã¯æãåçŽãªæå圢åŒã®1ã€ã§ãããããããã¯å€ãã®å Žåã幟äœåŠã§ç ç©¶ãããæåã®æŠå¿µã®1ã€ã§ãããããã¯ã2ã€ã®å¥ã
ã®ç¹ïŒéå§ç¹ãšçµäºç¹ïŒãšããããçµã¶ç·ã§èšè¿°ãããŸããç·åãã©ã¹ã¿ã©ã€ãºããããã«æãäžè¬çã«äœ¿çšãããã¢ã«ãŽãªãºã ã¯ããã¬ãŒã³ãã ã¢ã«ãŽãªãºã ãšåŒã°ããŸããBresenhamã®ã¢ã«ãŽãªãºã ã®æé ã¯æ¬¡ã®ããã«ãªããŸãã- ç·åã»ã°ã¡ã³ãã®éå§ç¹ãšçµäºç¹ã®å
¥åãååŸããŸãã
- ããããã£ãèšç®ããŠç·åã»ã°ã¡ã³ãã®æ¹åãæ±ºå®ãã d x ãã㊠d y ïŒ d x = x 1 - x 0 ã d y = y 1 - y 0 ïŒ
- ç¹æ§ã®æ±ºæ
sx
ãsy
åã³ãšã©ãŒæ€åºïŒæ°åŠçãªå®çŸ©ã¯ä»¥äžã®ãšããã§ãïŒã - ã»ã°ã¡ã³ãå
ã®åãã€ã³ããäžäžã®ãã¯ã»ã«ã«äžžããŸãã
Bresenhamã¢ã«ãŽãªãºã ãå®è£
ããåã«ããšã³ãžã³ã§äœ¿çšã§ããåºæ¬ã»ã°ã¡ã³ãã¯ã©ã¹ãäœæããŸãããã LineSegment Class { Variables: int startX, startY;
æ°ããã¯ã©ã¹ã䜿çšããŠå€æãå®è¡ããå¿
èŠãããå ŽåLineSegment
ã¯ã察å¿ãã倿ãéå§ç¹ãšçµäºç¹ã«é©çšããLineSegment
ããããã¯ã©ã¹ã«æ»ãã ãã§ååã§ããLineSegment
Bresenhamã¢ã«ãŽãªãºã ã¯ãåŸç¶ã®ãã¹ãŠã®ãã€ã³ããæ€çŽ¢ããããã«éå§ãã€ã³ããšçµäºãã€ã³ãã®ã¿ãå¿
èŠãšãããããã©ã€ã³éã®ãã¹ãŠã®ãã€ã³ãã¯æç»äžã«åŠçãããŸããæ¢åã®ãšã³ãžã³ã«ã¯ã©ã¹ãåã蟌ãã«ã¯ãã¯ã©ã¹LineSegment
ã«é¢æ°ã远å ããå¿
èŠdraw()
ãããããã颿°ã®äœ¿çšãæåŠããŸããreturnPointsInSegment
ããã®é¢æ°ã¯ãã©ã€ã³ã»ã°ã¡ã³ãã«ãããã¹ãŠã®ãã€ã³ãã®é
åãè¿ããŸããããã«ãããã»ã°ã¡ã³ããç°¡åã«æç»ããã³ã«ããã§ããŸãã颿°returnPointsInSegment()
ã¯æ¬¡ã®ããã«ãªããŸãïŒJavaScriptã§ïŒã function returnPointsInSegment() {
ã«ã¡ã©ã¯ã©ã¹ã«ã©ã€ã³ã»ã°ã¡ã³ãã®ã¬ã³ããªã³ã°ã远å ããæãç°¡åãªæ¹æ³ã¯if
ãããšãã°æ¬¡ã®ãããªåçŽãªæ§é ã远å ããããšã§ãã
ãããŠããããç§ãã¡ã®ãã¡ãŒã¹ãã¯ã©ã¹ãã©ãŒã ã®äœæ¥ã«å¿
èŠãªãã¹ãŠã§ãïŒBresenhamã¢ã«ãŽãªãºã ã®æè¡çãªåŽé¢ïŒç¹ã«ãšã©ãŒïŒã«ã€ããŠè©³ããç¥ãããå Žåã¯ãWikipediaã®èšäºã§ãããã«ã€ããŠèªãããšãã§ããŸãã
ãµãŒã¯ã«
åºå
žïŒhttp : //en.wikipedia.org/wiki/File:Bresenham_circle.svgåã®ã©ã¹ã¿ã©ã€ãºã¯ãç·åã®ã©ã¹ã¿ã©ã€ãºãããå°ãè€éã§ããã»ãšãã©ã®äœæ¥ã§ã¯ãåã®äžå¿ç¹ã«ã¢ã«ãŽãªãºã ã䜿çšããŸããããã¯ããã¬ãŒã³ãã ã¢ã«ãŽãªãºã ã®éçºã§ããã€ãŸããé¡äŒŒããæ®µéã§æ§æãããŠããŸãããããã€ãã®éãããããŸããæ°ããã¢ã«ãŽãªãºã ã¯æ¬¡ã®ããã«æ©èœããŸãã- äžå¿ç¹ãšåã®ååŸãååŸããŸãã
- åäž»æ¹åã®åŒ·å¶ãã€ã³ã
- å象éã®åšããã«ãŒããã匧ãæããŸã
circleã¯ã©ã¹ã¯line segmentã¯ã©ã¹ã«éåžžã«äŒŒãŠãããæ¬¡ã®ããã«ãªããŸãã Circle Class { Variables: int centerX, centerY;
ãã®é¢æ°returnPointsInCircle()
ã¯ãã¯ã©ã¹é¢æ°ã®ããã«åäœLineSegment
ããã«ã¡ã©ãã¬ã³ããªã³ã°ããŠåãåãããšãã§ããããã«ãã€ã³ãã®é
åãè¿ããŸããããã«ããããšã³ãžã³ã¯ããŸããŸãªåœ¢åŒãåŠçã§ããŸããããããã®åœ¢åŒã§ã¯ãããããªå€æŽã®ã¿ãè¡ãå¿
èŠããããŸãã颿°ã¯æ¬¡ã®ããã«ãªããŸãreturnPointsInCircle()
ïŒJavaScriptã®å ŽåïŒã function returnPointsInCircle() {
if
ã¡ã€ã³ã¬ã³ããªã³ã°ãµã€ã¯ã«ã«ãã1ã€ã®æ§æã远å ããã ãã§ããããã®åã¯ã³ãŒãã«å®å
šã«çµ±åãããŸãïŒæŽæ°ãããã¬ã³ããªã³ã°ãµã€ã¯ã«ã¯æ¬¡ã®ããã«ãªããŸãã
ããã§2ã€ã®æ°ããã¯ã©ã¹ãã§ããã®ã§ãäœãããŸãããïŒ
ã©ã¹ã¿ã©ã€ãºãŠã£ã¶ãŒã
ä»åã¯ããã°ã©ã ãã·ã³ãã«ã«ãªããŸãããŠãŒã¶ãŒãããŠã¹ãã¿ã³ãã¯ãªãã¯ãããšãã¯ãªãã¯ãã€ã³ããäžå¿ãšããã©ã³ãã ãªååŸã®åãæç»ãããŸããã³ãŒããèŠãŠã¿ãŸãããïŒ main{
ãã¹ãŠãæåãããããšã³ãžã³ã䜿çšããŠçŽ æŽãããåãæãããšãã§ããŸãã
ãããã«
ãšã³ãžã³ã«ã©ã¹ã¿ã©ã€ãºã®åºæ¬æ©èœã远å ããããããããç»é¢äžã«æçšãªãªããžã§ã¯ããæç»ãå§ããŸãïŒãŸã è€éãªããšã¯ãããŸããã§ããããå¿
èŠã«å¿ããŠãã»ã°ã¡ã³ãããµãŒã¯ã«ãªã©ãã人ã
ãåŒãåºããŸããæ¬¡ã®éšåã§ã¯ãã©ã¹ã¿ã©ã€ãºã«ã€ããŠããäžåºŠèŠãŠãããŸããä»åã ããããã«2ã€ã®ã¯ã©ã¹ããšã³ãžã³ã«è¿œå ããŸãïŒäžè§åœ¢ãšåè§åœ¢ãããŒã5ïŒäžè§åœ¢ãšåè§åœ¢ãã©ã¹ã¿ã©ã€ãºãã
ã¯ã©ã¹ãäœæããã«ã¯ãTriangle
ãšQuad
ç§ãã¡ã¯ç©æ¥µçã«ã¯ã©ã¹ã䜿çšããŸãLineSegment
ã
äžè§åœ¢ã®ã©ã¹ã¿ã©ã€ãº

Triangle
ãšã³ãžã³ã§ã®ã¯ã©ã¹ã®å®è£
ã¯éåžžã«ç°¡åã§ããç¹ã«LineSegment
ããã¹ãŠã®ã©ã¹ã¿ã©ã€ãºãè¡ãããclassã®äœ¿çšã®ãããã§ãããã®ã¯ã©ã¹ã䜿çšãããšã3ã€ã®ãã€ã³ããå²ãåœãŠããããã®éã«ç·ã»ã°ã¡ã³ããæç»ããŠãéããäžè§åœ¢ãäœæã§ããŸããã¯ã©ã¹ã®ã¹ã±ããã¯æ¬¡ã®ããã«ãªããŸãã Triangle Class { Variables:
æšæºåã®ããã«ã3ã€ã®ç¹ãæèšåãã«äžè§åœ¢ã§å®£èšãããŠãããšä»®å®ããŸããæ¬¡ã«ãã¯ã©ã¹LineSegment
ã䜿çšããŠã次ã®é¢æ°ãèšè¿°ã§ããŸãreturnPointsInTriangle()
ã function returnPointsInTriangle() { array PointsToReturn;
æªããªãããïŒ
æå®€LineSegment
ã§ã¯ãã§ã«å€ãã®äœæ¥ãè¡ã£ãŠãããããããè€éãªåœ¢ç¶ãäœæããããã«ã»ã°ã¡ã³ããé çªã«æ¥ç¶ããã ãã§ããããã«ãããæ°ããããªãŽã³ã远å ããã ãã§LineSegment
ïŒãããŠã¯ã©ã¹èªäœã«ããå€ãã®ãã€ã³ããæ ŒçŽããããšã§ïŒãããè€éãªããªãŽã³ïŒããªãŽã³ïŒãç»é¢äžã«ç°¡åã«äœæã§ããŸããæ¬¡ã«ãæ£æ¹åœ¢ã¯ã©ã¹ãäœæããŠããã®ã·ã¹ãã ã«ãã€ã³ãã远å ããæ¹æ³ãèŠãŠã¿ãŸãããã
æ£æ¹åœ¢ã®äœ¿çš
åè§åœ¢ã³ã³ãããŒã«ã¯ã©ã¹ãå®è£
ããã«ã¯ãã¯ã©ã¹ã«ããã€ãã®è¿œå ã远å ããã ãã§ãTriangle
ãå¥ã®ãã€ã³ãã»ããã䜿çšãããšãå蟺圢ã¯ã©ã¹ã¯æ¬¡ã®ããã«ãªããŸãã Quad Class { Variables: int Point1X, Point1Y;
次ã®returnPointsInQuad
ããã«ã颿°ã«å¥ã®ã©ã€ã³ã»ã°ã¡ã³ãã远å ããã ãã§ãã function returnPointsInQuad() { array PointsToReturn;
ãã®ã¯ã©ã¹ã®äœææ¹æ³ã¯éåžžã«ç°¡åã§ããããã¹ãŠã®ããªãŽã³ã1ã€ã®ã¯ã©ã¹ã«ã«ãã»ã«åããã¯ããã«ç°¡åãªæ¹æ³ããããŸããã«ãŒããšé
åã®éæ³ã䜿çšããŠãã»ãšãã©ããããè€éãªåœ¢ç¶ã«å¯Ÿå¿ã§ããããªãŽã³ã®ã¯ã©ã¹ãå®è£
ã§ããŸãïŒ
ããªãŽã³ã䜿çšããŸã
æ¡å€§ãç¶ããããªãŽã³ã¯ã©ã¹ãäœæããã«ã¯ã2ã€ã®éèŠãªæé ãå¿
èŠã§ããæåã®æ¹æ³ã¯ããã¹ãŠã®ãã€ã³ããé
åã«å
¥ããŠã次ã®ãããªã¯ã©ã¹ã®ã¹ã±ãããäœæããããšã§ãã Polygon Class { Variables: array Points;
2ã€ç®ã¯ãã«ãŒãã䜿çšããŠã颿°å
ã®äžç¹å®æ°ã®ã©ã€ã³ã»ã°ã¡ã³ãå
šäœããã©ããŒã¹ããreturnPointsInPolygon()
ããšã§ããããã¯æ¬¡ã®ããã«ãªããŸãã function returnPointsInPolygon { array PointsToReturn;
ãã®ã¯ã©ã¹ããšã³ãžã³ã«è¿œå ãããšãäžè§åœ¢ãã39é¢ã®ã¢ã³ã¹ã¿ãŒãŸã§ã1è¡ã®ã³ãŒãã§äœã§ãäœæã§ããŸãã
ããªãŽã³ã¯ãªãšã€ã¿ãŒ
æ°ããããªãŽã³ã¯ã©ã¹ã詊ãããã«ããã¹ãŠã®æ©èœã瀺ãããã°ã©ã ãäœæããŸãããããã®ããã°ã©ã ã§ã¯ããŠãŒã¶ãŒã¯ããŒã䜿çšããŠã衚瀺ãããããªãŽã³ã®åŽé¢ã远å ãŸãã¯åé€ã§ããŸãããã¡ãããå€è§åœ¢ã®èŸºã®æ°ã«å¶éãèšããå¿
èŠããããŸãã蟺ã3ã€æªæºã«ãªããšãå€è§åœ¢ã§ã¯ãªããªããŸããããªãŽã³ã®åŽé¢ã®äžéã«ã€ããŠã¯ããŸãããæ°ã«ããŸããããã ããã³ãŒãã«æ°ãããã€ã³ããèšå®ãããããèŸºã®æ°ã10ã«å¶éããŸããããã°ã©ã ã®ä»æ§ã¯ã次ã®éšåã«åããããšãã§ããŸãã- ç»é¢äžã®ããªãŽã³ã®åææç»ã
- AãæŒããšãããªãŽã³ã®èŸºã®æ°ã1ã€æžãããŸãã
- SããŒãæŒããšããããªãŽã³ã®èŸºã®æ°ã1å¢ãããŸãã
- å€è§åœ¢ã®èŸºã®æ°ã¯3以äžã§ãªããã°ãªããŸããã
- å€è§åœ¢ã®èŸºã®æ°ã¯10ãè¶
ããŠã¯ãªããŸããã
ã³ãŒããã©ã®ããã«èŠããããèŠãŠã¿ãŸãããã main{
ç§ãã¡ã®å°ããªããã°ã©ã ã§ã¯ãç»é¢äžã®ããªãŽã³ã倿Žã§ããããã«ãªããŸããïŒããã°ã©ã ãããå°ã匷åã«ãããå Žåã¯ãããªãŽã³ã倿ŽããŠã¢ã«ãŽãªãºã ã远å ããã¹ã±ãŒãªã³ã°ãç°¡çŽ åã§ããŸããååšãããã©ããã¯ããããŸããããååšããå Žåã¯ãç¡éã«ã¹ã±ãŒã©ãã«ãªããªãŽã³ãç°¡åã«ååŸã§ããŸãïŒ
ãããã«
çŸåšããšã³ãžã³ã«ã¯å€ãã®ã©ã¹ã¿ã©ã€ãºæäœããããã»ãŒãã¹ãŠã®å¿
èŠãªåœ¢ç¶ãäœæã§ããŸãïŒãã ãããããã®äžéšã¯çµã¿åãããå¿
èŠã§ãïŒã次ã®ããŒãã§ã¯ããã©ãŒã ã®æç»ããé¢ããŠãä»ã®ããããã£ã«ã€ããŠèª¬æããŸããç»é¢ã«å°ããªè²ã远å ããããšã«èå³ãããå Žåã¯ã次ã®ããŒãããèªã¿ãã ããïŒããŒã5ïŒè²
çè«äžã®ãšã³ãžã³ã«ã¯ãå¿
èŠãªãã®ãã»ãŒãã¹ãŠå«ãŸããŠããŸãïŒ- ã¯ã©ã¹
Point
ãšVector
ïŒãšã³ãžã³ã®ãã«ãã£ã³ã°ãããã¯ïŒã - ç¹ã®å€æã®æ©èœã
- ã¯ã©ã¹
Camera
ïŒã¹ã³ãŒããèšå®ããç»é¢å€ã®ãã€ã³ããåãåããŸãïŒã - ã©ã¹ã¿ã©ã€ãºçšã®3ã€ã®ã¯ã©ã¹ïŒç·åãåãå€è§åœ¢ïŒã
ããã§ã¯ãè²ã远å ããŸãããïŒ
ã¿ããªã®è²ïŒ
ãšã³ãžã³ã¯è²ãåŠçãããã®å€ãã¯ã©ã¹ã«ä¿åããŸãPoint
ãããã«ãããåãã€ã³ãã«ç¬èªã®è²ãæãããããšãã§ããã©ã€ãã£ã³ã°ãšã·ã§ãŒãã£ã³ã°ã®èšç®ã倧å¹
ã«ç°¡çŽ åãããŸãïŒå°ãªããšã人éã«ãšã£ãŠã¯-ãã®ãããªãšã³ãžã³ã³ãŒãã¯ããŸã广çã§ã¯ãããŸããïŒãã·ãŒã³ã®ã©ã€ãã£ã³ã°ãšã·ã§ãŒãã£ã³ã°ãèšç®ãããšããç¹ã®ãªã¹ãã䜿çšããŠé¢æ°ãäœæããå
æºãŸã§ã®è·é¢ãèæ
®ããŠãã¹ãŠã®ç¹ãåŠçããããã«å¿ããŠè²ã倿Žã§ããŸããããã°ã©ãã³ã°ã§è²ãä¿åããæãæšæºçãªæ¹æ³ã®1ã€ã¯ãèµ€ãç·ãéã®å€ã䜿çšããããšã§ãïŒéåžžãå æ³æ··è²ãšåŒã°ããŸãïŒãåè²æåã®0ã255ã®å€ãä¿åããããšã«ãããè²ã®å€§ããªãã¬ãããäœæã§ããŸãã ïŒããã¯ã»ãšãã©ã®APIãè²ãå®çŸ©ããæ¹æ³ã§ãããããäºææ§ã®ããã«ãã®ã¡ãœããã䜿çšããããšã¯è«ççã§ãïŒã䜿çšãããã°ã©ãã£ãã¯ã¹APIã«å¿ããŠããããã®å€ã¯10鲿°ïŒ255,0,0
ïŒãŸãã¯16鲿°ïŒ0xFF0000
ãŸãã¯#FF0000
ïŒã§éä¿¡ã§ããŸãã 10é²åœ¢åŒã䜿çšããŸããããã¯ãäœæ¥ãã¯ããã«ç°¡åã ããã§ããããã«ãã°ã©ãã£ã«ã«APIã16é²å€ã䜿çšããŠããå Žåããããã10é²å€ã16é²å€ã«å€æããæ©èœããããŸããã€ãŸããããã¯åé¡ã«ãªããŸããã
ã«ã©ãŒã¢ãã«ã®å®è£
ãéå§ããããã«ãæã
ã¯ã¯ã©ã¹ãã€ã³ãã§3ã€ã®æ°ãã倿°ã远å ããŸãred
ãblue
ãšgreen
ããããŸã§ã®ãšãããçè§£ã§ããªãããšã¯äœãèµ·ããŠããŸããããã¯ã©ã¹ã®ã¹ã±ããã¯æ¬¡ã®ããã«ãªãPoint
ãŸãã Point Class { Variables: num tuple[3];
ãããã®è²ãä¿åããããã«å¿
èŠãªã®ã¯ããã ãã§ããæå®ããè²ã䜿çšããããã«ã«ã¡ã©ã®ã¬ã³ããªã³ã°é¢æ°ã倿Žããå¿
èŠããããŸãã颿°ã®ã¿ã€ãã¯ã䜿çšããã°ã©ãã£ã«ã«APIã«å€§ããäŸåããŸãããéåžžããã¹ãŠã®ã€ã³ã¿ãŒãã§ã€ã¹ã«ã¯åæ§ã®é¢æ°ããããŸãã object.setColor(red, green, blue)
ã°ã©ãã£ã«ã«APIã10鲿°ã§ã¯ãªã16鲿°ã®è²ã®å€ã䜿çšããå Žåã颿°ã¯æ¬¡ã®ããã«ãªããŸãã object.setColor(toHex(red,green,blue))
ãã®é¢æ°ã¯toHex()
ãRGBå€ã16é²å€ã«å€æãã颿°ã䜿çšããŸãïŒç°ãªãAPIã§ã¯é¢æ°ã®ååã¯ç°ãªããŸãïŒããããæåã§è¡ãå¿
èŠã¯ãããŸããããããã®å€æŽãè¡ãããšã«ãããã·ãŒã³å
ã«è²ä»ãã®ããããååŸã§ããŸããæ¬¡ã®æ®µéã§ã¯ããã©ãŒã å
šäœãè²ä»ãã§ããããã«ãã©ã¹ã¿ã©ã€ãºã¯ã©ã¹ãè£å®ããŸãããã®æ©èœãã¯ã©ã¹ã«è¿œå ããã«ã¯ãè²ç®¡çãã³ã³ã¹ãã©ã¯ã¿ãŒé¢æ°ã«è¿œå ããã ãã§ããæ¬¡ã®ããã«ãªããŸãã lineSegment::constructor(startX, startY, endX, endY, red, green, blue) { this.startX = startX; this.startY = startY; this.endX = endX; this.endY = endY; this.red = red; this.green = green; this.blue = blue; }
ããã§ãé
åã®åãã€ã³ããæå®ãããè²ãæã€ããã«ãè¿ããããã€ã³ãã®é¢æ°ã倿Žããã ãã§ããæ°ãã颿°ã¯æ¬¡ã®ããã«ãªããŸãã function returnPointsInSegment() {
ããã§ãã©ã€ã³ã»ã°ã¡ã³ãäžã®åãã€ã³ãã¯ãã©ã€ã³ã»ã°ã¡ã³ãã«åãè²ã転éãããŸãããã®ã¡ãœããã䜿çšããŠãè²ããã³ãã®ä»ã®ã¯ã©ã¹ã®ã©ã¹ã¿ã©ã€ãºãæå®ãããšãã·ãŒã³ãç°ãªãè²ã§ãã€ã³ããããŸãïŒããã°ã©ã ãäœæããŠãæ°ããæ©èœã䜿çšããŸãããã
1670äžè²ã®å®éš
å æ³æ··è²ã䜿çšãããšãåçŽãªè¡šèšæ³ïŒr,g,b
ïŒã䜿çšããŠ1670äžè²ä»¥äžãç°¡åã«äœæã§ããŸãããã®èšå€§ãªéã®è²ãã¹ãŠã掻çšããããã°ã©ã ãäœæããŸãããŠãŒã¶ãŒãããŒã¹ãããŒã¯ãæŒãããšã§èµ€ãç·ãéã®è²æåãåå¥ã«å¶åŸ¡ã§ããããã«ãã奜ããªè²ãéžæã§ããããã«ããŸããããã°ã©ã ã®ä»æ§ã¯æ¬¡ã®ãšããã§ãã- ç»é¢äžã«ãªããžã§ã¯ããæç»ããŸãã
- AããŒãæŒããšãèµ€ã®ã³ã³ããŒãã³ãã®å€ãæžå°ããQãæŒããšå¢å ããŸãã
- SããŒãæŒããšãç·ã®ã³ã³ããŒãã³ãã®å€ãæžå°ããWãæŒããšå¢å ããŸãã
- DããŒãæŒããšãéã®ã³ã³ããŒãã³ãã®å€ãæžå°ããEãæŒããšå¢å ããŸãã
- è²ãæŽæ°ããåŸã«ãªããžã§ã¯ããåæç»ããŸãã
- ã³ã³ããŒãã³ãã®å€ãå¶éãã0ã255ãè¶
ããªãããã«ããå¿
èŠããããŸãã
ããããã¹ãŠã念é ã«çœ®ããŠãããã°ã©ã ã®æŠèŠãã©ã®ããã«èŠããããèŠãŠã¿ãŸãããã main{
ããã§ããªããžã§ã¯ãã詊ããŠä»»æã®è²ãä»ããããšãã§ããŸãïŒ
ãããã«
ãšã³ãžã³ã«è²ã远å ããç
§æãæäœããããã«å¿
èŠãªãã®ããã¹ãŠæããŸãããæ¬¡ã®ããŒãã§ã¯ãå
æºãäœæããããã»ã¹ãèŠãŠããããã®å
æºããããã®è²ã«åœ±é¿ãäžããããšãã§ãã颿°ãäœæããŸããããŒã7ïŒåçç
§æ
ãã®ããŒãã§ã¯ããã€ãããã¯ã©ã€ãã£ã³ã°ã®éåžžã«åºæ¬çãªéšåã®ã¿ãæ€èšããŸãã®ã§ãæãããªãã§ãã ããïŒãã®ãããã¯å
šäœã¯éåžžã«åºç¯ã§ãããæ¬å
šäœãæžãããŠããŸãïŒãå
·äœçã«ã¯ãååŸãäžå®ã®åäžãã€ã³ãã®åäžè²ã®åçç
§æã·ã¹ãã ãäœæããŸããããããå§ããåã«ã以åã«äœæãã䟿å©ãªã¯ã©ã¹ãèŠãŠã¿ãŸãããã
ç¹°ãè¿ã
ç»é¢ãžã®åºåããã»ã¹ã®åãã€ã³ãã§ãåçç
§æãåŠçãããŸããããã¯ã以åã®2ã€ã®ã¯ã©ã¹ã§ããclass Point
ãšclass ãç©æ¥µçã«äœ¿çšããããšãæå³ãCamera
ãŸãããããã¯æ¬¡ã®ããã«ãªããŸãã Point Class { Variables: num tuple[3];
ãã®æ
å ±ã«åºã¥ããŠç°¡åãªç
§æã¯ã©ã¹ãäœæããŸãããã
ç
§æã¯ã©ã¹
åçç
§æã®äŸããœãŒã¹ïŒhttp : //redeyeware.zxq.netåäœããã«ã¯ãç
§æã¯ã©ã¹ã«ããã€ãã®æ
å ±ãã€ãŸãäœçœ®ãè²ãã¿ã€ãã匷床ïŒãŸãã¯ç
§æã®ååŸïŒãå¿
èŠã§ããåã«è¿°ã¹ãããã«ãã©ã€ãã£ã³ã°ã¯åãã€ã³ããæç»ãããåã«èšç®ãããŸãããã®ã¢ãããŒãã®å©ç¹ã¯ããšã³ãžã³æ§é ãç°¡åã«ãªããããã°ã©ã ã®è² è·ã®ã»ãšãã©ãäžå€®åŠçè£
眮ã«è»¢éãããããšã§ããç
§æãäºåã«èšç®ããŠãããšãè² è·ã¯ã³ã³ãã¥ãŒã¿ãŒã®ããŒããã©ã€ãã«è»¢éããããšã³ãžã³ã®èšèšã«ãã£ãŠã¯å®è£
ããã容æãŸãã¯ããå°é£ã«ãªããŸããããããã¹ãŠã念é ã«çœ®ããŠãã¯ã©ã¹ã¯æ¬¡ã®ããã«ãªããŸãã Lighting Class { Variables: num position[3];
åœåã®éãç°¡åã«ããããã«ããããã®å€ã¯ãã¹ãŠããŒãã³ãŒãã£ã³ã°ããããŸãŸã«ããŸãããç
§æã¯ã©ã¹ã®æ©èœãæ¡åŒµãããå Žåã¯ãä»ã®é¢æ°ãã³ã³ã¹ãã©ã¯ã¿ãŒãªã©ã䜿çšããŠãããã®å€ãç°¡åã«å€æŽã§ããŸãããã ããåçç
§æã®éèŠãªèšç®ã¯ãã¹ãŠã«ã¡ã©ã¯ã©ã¹ã§å®è¡ããããããèŠãŠã¿ãŸãããã
å
ïŒã«ã¡ã©ïŒã¢ãŒã¿ãŒ
åçç
§æã®å¥ã®äŸããœãŒã¹ïŒhttp : //blog.illuminatelabs.com/2010/04/hdr-and-baked-lighting.html次ã«ãå
æºãä¿åããããã«äœ¿çšããã«ã¡ã©ã¯ã©ã¹ã«æ°ãã倿°ã远å ããŸãããããŸã§ã®ãšããããã®å€æ°ã«ã¯ãœãŒã¹ã®ã€ã³ã¹ã¿ã³ã¹ã1ã€ããå«ãŸããŠããŸããããè€æ°ã®ãã€ã³ããœãŒã¹ãæ ŒçŽã§ããããã«ç°¡åã«æ¡åŒµã§ããŸããç¹ãæç»ãããçŽåã«ãå
æºã®ååŸå
ã«ãããã©ããã確èªããŸããããå Žåã¯ããã€ã³ããšãœãŒã¹ã®äœçœ®ãšã®éã®è·é¢ãèŠã€ããŠãè·é¢ã«å¿ããŠãã€ã³ãã®è²ã倿Žããå¿
èŠããããŸããããããã¹ãŠã念é ã«çœ®ããŠãã«ã¡ã©é¢æ°ã®ã³ãŒãã«äŒŒãã³ãŒãã远å ã§ããŸãdrawScene()
ã if(currentPoint.x >= (light.x - light.radius)){
ã芧ã®ãšããããã€ã³ãã®è²ã倿Žããæ¹æ³ã¯ãŸã è€éã§ã¯ãããŸããïŒãã ããå¿
èŠã«å¿ããŠäœ¿çšã§ãããã®ã¯ä»ã«ããããããããŸãïŒãå
æºã®äžå¿ãŸã§ã®è·é¢ã«å¿ããŠããã€ã³ãã®è²ãããŒã»ã³ããŒãžã§å€æŽããŸãããã®ç
§ææ¹æ³ã§ã¯ã·ã§ãŒãã£ã³ã°ããŸã£ããèæ
®ãããŠããªããããå
æºããé ããã€ã³ãã¯æããªããããªããžã§ã¯ãã¯èåŸã«ããä»ã®ãªããžã§ã¯ãããã®å
ããããã¯ããŸããã
å
ã«åŸã£ãŠãã ãã
ä»åã®ããã°ã©ã ã§ã¯ãç»é¢äžã®ããã€ãã®æ°žç¶çãªãã©ãŒã ã䜿çšããŸããä»»æã®åœ¢ç¶ãéžæã§ããŸããããã®äŸã§ã¯ããã€ãã®åçŽãªãã€ã³ãã䜿çšããŸãããŠãŒã¶ãŒãç»é¢ãã¯ãªãã¯ãããšããã®æç¹ã§å
æºãäœæãããŸããæ¬¡ã«æŒããšããã€ã³ããæ°ããäœçœ®ã«ç§»åããŸããããã«ãããåäœäžã®åçãªç
§æã芳å¯ã§ããŸããããã°ã©ã ã¯æ¬¡ã®ããã«ãªããŸãã main{
ãã€ãããã¯ã©ã€ãã£ã³ã°ã®å®éã®åäœãçè§£ããã²ãŒã ãšã³ãžã³ã«ã©ã®çšåºŠã®æ·±ãã远å ããããã確èªã§ããŸãã
ãããã«
ãã€ãããã¯ã©ã€ãã£ã³ã°ã¯ã·ã³ãã«ã§ãããå¿
èŠã«å¿ããŠç°¡åã«æ¡åŒµã§ããŸããããªãã·ã³ãã«ã ãè峿·±ã远å ïŒ- å¯å€ç
§æååŸ
- ç
§æã®å€æŽå¯èœãªè²ïŒè²ãåäžã«å€æŽãã代ããã«ãç¹å®ã®è²ã®äžéšã«å€æŽã§ããŸãïŒ
- (, ..)