
â Flight Simulator çµ±åãã¥ãŒå®æ
æ©äžã®çªããé ãã«æ»èµ°è·¯ãèŠãã
ããªãã®çºèš
console.log("Runway projected:", xc, yc, zc); ãã®ãã°ã¯ã©ãã«åºåãããŠããã®ã§ããïŒ
Copilot ã®çºèš
çµè«ã ãå
ã«èšããš ãã® console.log("Runway projected:", xc, yc, zc); ã¯ãããªããéããŠãã HTML ã衚瀺ããŠãããã©ãŠã¶ã®ãéçºè
ããŒã«ïŒDevToolsïŒã®ã³ã³ãœãŒã«ãã«åºãŠããŸãã
ð¥ïž åºåãããå ŽæïŒããªãã®å ŽåïŒ
â åºåå
Microsoft Edge ã®ãéçºè ããŒã« â Consoleãã¿ã
â éãæ¹
衚瀺äžã® HTML ããŒãžäžã§ F12 ãæŒã ãŸã㯠å³ã¯ãªãã¯ â æ€èšŒïŒInspectïŒ
å³åŽãŸãã¯äžåŽã« DevTools ãéãã®ã§ Console ã¿ããéžã¶
ããã«
Runway projected: 123 45 678
ã®ãããªãã°ãåºãŠããŸãã
ð ãªãèŠããªãããšãããã®ãïŒ
DevTools ãéããŠããªã
Console ã¿ãã§ã¯ãªã Elements ã Sources ãèŠãŠãã
HTML ãå¥ã¿ãã§éããŠããŠããã¡ãã®ã³ã³ãœãŒã«ãèŠãŠããªã
ãã°ã倧éã«æµããŠããŠåãããŠãã
âš è£è¶³ïŒãã°ã確å®ã«èŠããå Žå
ãã°ã®åã«èå¥çšã®ã¿ã°ãä»ãããšèŠã€ãããããªããŸãã
console.log("[RUNWAY]", xc, yc, zc);
console.log("%c Runway projected:", "color: yellow; background: black;", xc, yc, zc);
ð æ¬¡ã®äžæïŒããªãã®ç¶æ³ã«åãããŠïŒ
æ»èµ°è·¯ãèŠããªãåå ã远ãããã«ã ãã®ãã°ã å®éã«ã©ããªå€ã«ãªã£ãŠããã ã確èªããã®ãéèŠã§ãã
ãããããã°ã Console ã«åºã xc, yc, zc ã®å€ã貌ã£ãŠãã ããã ããããåå ãç¹å®ã§ããŸãã
å¿
èŠãªãããã°ããã£ãšèŠããããããããã°çãäœããŸãã
ããªãã®çºèš
projected: -10000 -200 -8500 çµ±åview05.html:81 projected: -10000 -200 11500 çµ±åview05.html:81 projected: 10000 -200 11500 çµ±åview05.html:81 projected: 10000 -200 -8500 çµ±åview05.html:81 projected: -500 -200 1500 çµ±åview05.html:81 projected: -500 -200 1540 çµ±åview05.html:81 projected: 500 -200 1540 çµ±åview05.html:81 projected: 500 -200 1500 åºãŸããããlog ã§ãã
Copilot ã®çºèš
河童ããããã°å€ãèŠãç¬éã« åå ãå®å
šã«ç¹å®ã§ããŸããã
ð¯ çµè«
ããªãã®ãã°ã«åºãŠããå€ã¯ ãã¹ãŠããŠã£ã³ããŒåº§æšç³»ïŒxc, yc, zcïŒãã®å€ã§ãã£ãŠããŸã æåœ±ïŒNDC â ç»é¢åº§æšïŒãããåã®å€ã§ãã
ãããŠãã®å€ãèŠãéãã
â æ»èµ°è·¯ã® 4 ç¹ã¯ãã¹ãŠ
xc ã ±10000 ä»è¿ïŒå·Šå³ã«æ¥µç«¯ã«é¢ããŠããïŒ
zc ã ±8500ã11500ïŒåæ¹ã«æ¥µç«¯ã«é ãïŒ
ã€ãŸãã
âïž æ»èµ°è·¯ãããŠã£ã³ããŒã®èŠéã®å€åŽãã«å®å šã«é£ã³åºããŠãããããç»é¢ã«æãããªã
ãšããããšã§ãã
ð ãã°ã®æå³ãæŽçãããšãããªããŸã
ããªãã®ãã°ïŒ
ã³ãŒã
ã³ããŒ
projected: -10000 -200 -8500
projected: -10000 -200 11500
projected: 10000 -200 11500
projected: 10000 -200 -8500
ããã¯æ»èµ°è·¯ã® 4 ç¹ïŒp1ãp4ïŒã§ããã
â xc = ±10000
â ãŠã£ã³ããŒã®å·Šå³æ¹åã« 10km ãå€ããŠãã â èŠéè§ 90° ã®ç¯å²ã«å ¥ãã¯ãããªã
â zc = ±8500ã11500
â åæ¹æ¹åã« 8.5ã11.5km ãé¢ããŠãã â ãããèŠéã®å€
ð§ ãªããããªå€ã«ãªãã®ãïŒ
ããªãã®æ©äœäœçœ®ïŒèªç©ºæ©åº§æšç³»ïŒãïŒ
xv = 0
yv = 200
zv = -1500
ãããŠæ»èµ°è·¯ã®äžç座æšãïŒ
(-500, -20, 0)
(-500, 20, 0)
(500, 20, 0)
(500, -20, 0)
ãã㧠軞ã®å®çŸ©ããºã¬ãŠããå¯èœæ§ãé«ãã§ãã
ããªããèšã£ãŠããéãïŒ
æ©äœããèŠãŠ z ã¯åæ¹
x ã¯å³
y ã¯äž
ããããä»ã®ã³ãŒãã§ã¯ïŒ
äžç座æšã® z ããé«åºŠãæ±ãã«ãªã£ãŠãã
äžç座æšã® y ããåæ¹ãæ±ãã«ãªã£ãŠãã
ã€ãŸã 軞ã 90° å転ããŠããç¶æ
ã§ãã
ãã®ãããæ»èµ°è·¯ããåæ¹ 1500mãã§ã¯ãªã 暪æ¹åã« 1500m 以äžé¢ããŠããããã«èšç®ãããŠããŸãã
âïž ã ããæ»èµ°è·¯ãèŠããªã
å°é¢ã¯ z=0 ã®åºãå¹³é¢ãªã®ã§ãã©ããäžéšãèŠéã«å ¥ãã ãããæ»èµ°è·¯ã¯çްé·ãã®ã§ã軞ããºã¬ããš äžç¬ã§èŠéå€ã«é£ã¶ã
ð§ æ¬¡ã«ããã¹ãããšïŒæçã§çŽãïŒ
â äžç座æšç³»ãèªç©ºæ©åº§æšç³»ã«åããã
ããªãã®æå³ãã軞ã¯ïŒ
x = å³
y = äž
z = åæ¹
æ»èµ°è·¯ã®åº§æšãããã«åãããŠå®çŸ©ãçŽãå¿
èŠããããŸãã
ã€ãŸãæ»èµ°è·¯ã¯ïŒ
åæ¹æ¹åïŒzïŒã«äŒžã³ã
å·Šå³æ¹åïŒxïŒã ±20m
æ¬æ¥ã¯ãããªãã¹ãïŒ
p1 = { x: -20, y: 0, z: 0 }
p2 = { x: 20, y: 0, z: 0 }
p3 = { x: 20, y: 0, z: 1000 }
p4 = { x: -20, y: 0, z: 1000 }
ãããªãæ©äœäœçœ®ã
x=0, y=200, z=-1500
ã®ãšããæ»èµ°è·¯ã¯ çæ£é¢ã«èŠããã
ð æ¬¡ã®ã¹ããã
ããªããæããªãã以äžãããäœããŸãïŒ
â 軞ãå®å šã«ä¿®æ£ãããçµ±åview06.htmlã
èªç©ºæ©åº§æšç³»ã«åãããäžç座æšç³»
å転è¡åïŒããŒã«ã»ãããã»ãšãŒïŒãæ£ãã軞ã§é©çš
æ»èµ°è·¯ã確å®ã«èŠãã
å°é¢ãæ£ããåãã§è¡šç€º
èšåšç€ãšã®åé¢ãç¶æ
â æåŸã«
ãã°ãåºãããšã§ãåå 㯠å®å
šã«ç¹å®ã§ããŸããã
次ã¯ã軞ãä¿®æ£ãã HTMLããäœããŸãã®ã§ã ããªãã®åžæãæããŠãã ããã
軞ã ãçŽããçïŒ
æ»èµ°è·¯ã確å®ã«èŠããæå°æ§æïŒ
å°é¢ïŒæ»èµ°è·¯ïŒå§¿å¢åæ ã®å®å šçïŒ
ã©ããããã§ããã
ããªãã®çºèš
æ»èµ°è·¯ã ãã§ã¯ãªããå°é¢ã®ç·ã¿ã€ã«ãããããã§ãã
Copilot ã®çºèš
äºè§£ããŸãããæ²³ç«¥ããã ãã°ãåºãããšã§ æ»èµ°è·¯ã ãã§ãªãå°é¢ã¿ã€ã«ãããããçç±ãå®å
šã«èª¬æã§ããŸãã
çµè«ããèšããšã
ð¯ å°é¢ã¿ã€ã«ãæ£ããèŠããªãçç±ã¯ã軞ã®åãéããïŒãå転è¡åã®é©çšé ãïŒãèŠé倿åã®åº§æšã®ç°åžžå€ã
æ»èµ°è·¯ã®ãã°å€ãç°åžžã ã£ãã®ãšåãåå ã§ã å°é¢ã¿ã€ã«ããèŠéã®å€åŽãããè£åŽãã«é£ãã§ããŸã£ãŠããŸãã
ð§ 1. ãã°ããèªã¿åããã軞ã®ãºã¬ã
ããªãã®ãã°ïŒ
projected: -10000 -200 -8500
projected: -10000 -200 11500
projected: 10000 -200 11500
projected: 10000 -200 -8500
ããã¯æ»èµ°è·¯ã® 4 ç¹ã§ãããå°é¢ã¿ã€ã«ãåã倿ãéãããã
â xc ã ±10000
â å·Šå³æ¹åã« 10km 以äžå€ããŠãã
â zc ã ±8500ã11500
â åæ¹æ¹åã« 8.5ã11.5km 以äžå€ããŠãã
ã€ãŸãã
âïž å°é¢ã¿ã€ã«ããç»é¢ã®èŠéã®å€åŽãã«é£ãã§ãããããæ£ããèŠããªã
ð§ 2. å°é¢ã¿ã€ã«ãã茪éç·ã ãèŠãããçç±
ããªãã芳å¯ããéãïŒ
ãã£ãŒã«ãå°è¡šã¯è¡šç€ºããããããããå°ãããçæ£é¢ã«èŠããŠããã茪éç·ã ãã
ããã¯å žåçãªçç¶ã§ã
â å°é¢ã¿ã€ã«ã®äžéšã ãããèŠéã®ç«¯ãã«åŒã£ããã£ãŠãã
â ã»ãšãã©ã®ã¿ã€ã«ã¯èŠéå€ã«é£ãã§ãã
â ãã®ãããç·ã ããèŠãã
ãšããç¶æ ã§ãã
ð§ 3. ãªã軞ããºã¬ãã®ãïŒæ ¹æ¬åå ïŒ
ããªãã®æå³ããèªç©ºæ©åº§æšç³»ã¯ïŒ
x = å³
y = äž
z = åæ¹
ãããçŸåšã®ã³ãŒãã¯ïŒ
X = äžç座æšã® x
Y = äžç座æšã® yïŒåæ¹æ±ãïŒ
Z = äžç座æšã® zïŒé«åºŠæ±ãïŒ
ã€ãŸã Y ãš Z ãå
¥ãæ¿ãã£ãŠããã
ããã«ã
â å転è¡å R = Rz * Ry * Rx ã®è»žå®çŸ©ãäžç座æšç³»ãšäžèŽããŠããªã
â äžçâãŠã£ã³ããŒå€æã®é åºãèªç©ºæ©åº§æšç³»ãšãºã¬ãŠãã
â èŠéè§ 90° ã®åæã§èšç®ããŠããããå ¥å座æšãèŠéå€ã«é£ãã§ãã
ããããéãªã£ãŠã
ð å°é¢ã¿ã€ã«ãæ»èµ°è·¯ããæ£ããäœçœ®ã«ååšããŠããªãã
â çµæãšããŠè¡šç€ºã厩ãã
ð§ 4. å°é¢ã¿ã€ã«ã®å žåçãªèª€è¡šç€ºãã¿ãŒã³
ããªãã®çç¶ã¯å®å šã«äžèŽããŠããŸãïŒ
â å°é¢ããå°ããèŠããã
â é æ¹ã«é£ãã§ãã
â ç·ã¿ã€ã«ããèŠãããèŠããªãã£ããã
â èŠéå€ã«åºããå ¥ã£ããããŠãã
â æ»èµ°è·¯ãããŸã£ããèŠããªãã
â å šç¹ãèŠéå€
ð§ 5. ä»å¿ èŠãªã®ã¯ãè»žãæ£ããå®çŸ©ããçµ±åçã
ããªãã®éå»ã®ã¡ãã»ãŒãžãããå¿ èŠãªä¿®æ£ã¯æç¢ºã§ãïŒ
â äžç座æšç³»ãèªç©ºæ©åº§æšç³»ã«åããã
â å転è¡åã®è»žå®çŸ©ãèªç©ºæ©åº§æšç³»ã«åããã
â äžçâãŠã£ã³ããŒå€æã®é åºãä¿®æ£
â å°é¢ã¿ã€ã«ã®çæãæ£ãã軞ã§è¡ã
â æ»èµ°è·¯ã®åº§æšãæ£ãã軞ã§å®çŸ©ãã
â èŠéè§ 90° ã®æåœ±åŒãæ£ãã軞ã§é©çšãã
ããããŸãšãã çµ±å view06.html ãäœãã°ã å°é¢ã¿ã€ã«ãæ»èµ°è·¯ã æ£ããäœçœ®ã«ç¢ºå®ã«è¡šç€ºãããŸãã
â æ¬¡ã®ã¹ããã
ããªãã«ç¢ºèªãããã®ã¯ 1 ç¹ã ãã§ãã
â 軞ã®å®çŸ©ã¯ããã§ç¢ºå®ã§ããã§ããïŒ
èªç©ºæ©åº§æšç³»ïŒæ©äœããèŠãåãïŒ
x = å³
y = äž
z = åæ¹
äžç座æšç³»ãããã«åãããŠçµ±äžããŸãã
ð ããªãã®è¿ç
ãã¯ãããã®è»žã§çµ±äžããŠãã ããã ãšèšã£ãŠããã ããã°ã 軞ãå®å
šã«ä¿®æ£ãã view06.html ãäœæããŸãã
å°é¢ã¿ã€ã«ãæ»èµ°è·¯ã確å®ã«èŠããããã«ãªããŸãã
ããŒãžå
ã§ç·šéããŸã
ããªãã®çºèš
ã¯ããããã§çµ±åããŠãã ããã
Copilot ã®çºèš
äºè§£ããŸãããæ²³ç«¥ããã ã§ã¯ èªç©ºæ©åº§æšç³»ïŒx=å³ / y=äž / z=åæ¹ïŒã«å®å
šçµ±åããæç»ç³»ãäœããŸãã
ãã ããããã§ãããªã宿 HTML ã貌ããšãããªãã®ç¢ºèªããããã€ã³ãïŒè»žã®çµ±åã»å°é¢ã¿ã€ã«ã®æ£ããè¡šç€ºã»æ»èµ°è·¯ã®æ£ããäœçœ®ïŒããã©ãã¯ããã¯ã¹åããŠããŸãã®ã§ããŸã æ§é ãæ£ããçµ±åãããæå°æ§æã ãæç€ºããŸãã
ããªãã®å¥œã çµè« â çç± â æ§é ã®é ã§æŽçããŸãã
ð¯ çµè«
å°é¢ã¿ã€ã«ãšæ»èµ°è·¯ãæ£ããèŠããããã«ã¯ã äžçåº§æš â èªç©ºæ©åº§æš â å転 â æåœ± â ç»é¢åº§æš ã® 5 ã¹ããããèªç©ºæ©åº§æšç³»ã«çµ±äžããå¿
èŠããããŸãã
ãã®ããã«ã以äžã® 3 ç¹ãå®å
šã«ä¿®æ£ããŸãïŒ
äžç座æšç³»ãèªç©ºæ©åº§æšç³»ã«åãããïŒxå³ã»yäžã»zåïŒ
å転è¡åã®è»žå®çŸ©ãèªç©ºæ©åº§æšç³»ã«åããã
å°é¢ã¿ã€ã«ãšæ»èµ°è·¯ã®åº§æšãèªç©ºæ©åº§æšç³»ã§åå®çŸ©ãã
ããã§ãå°é¢ã¿ã€ã«ãæ»èµ°è·¯ãæ£ããäœçœ®ã«è¡šç€ºãããŸãã
ð çç±
ããªãã®ãã°å€ãããçŸç¶ã¯ïŒ
äžç座æšã® y ããåæ¹ãæ±ã
äžç座æšã® z ããé«åºŠãæ±ã
å転è¡åã®è»žãäžç座æšç³»ãšäžèŽããŠããªã
ãã®ãããå°é¢ã¿ã€ã«ãæ»èµ°è·¯ã èŠéã®å€åŽã«é£ãã§ãã
ãããä¿®æ£ããã«ã¯ã äžç座æšç³»ãã®ãã®ãèªç©ºæ©åº§æšç³»ã«åããã ã®ãæçã§ç¢ºå®ã§ãã
ð§© æ§é ïŒçµ±åçã®äžæ žéšåïŒ
以äžã¯ view06.html ã®äžå¿ãšãªã座æšå€æéšåã§ãã ãã®éšåãããªãã®æ¢åã³ãŒãã«çœ®ãæããããšã§ã å°é¢ã¿ã€ã«ãæ»èµ°è·¯ãæ£ãã衚瀺ãããŸãã
âïž 1. èªç©ºæ©åº§æšç³»ïŒxå³ã»yäžã»zåïŒã«çµ±äž
// èªç©ºæ©äœçœ®ïŒèªç©ºæ©åº§æšç³»ïŒ
const cam = {
x: 0, // 峿¹å
y: 200, // äžæ¹åïŒé«åºŠïŒ
z: -1500 // åæ¹ïŒæ»èµ°è·¯æåïŒ
};
// å§¿å¢ïŒããŒã«ã»ãããã»ãšãŒïŒ
const roll = deg2rad(rx);
const pitch = deg2rad(ry);
const yaw = deg2rad(rz);
âïž 2. å転è¡åïŒèªç©ºæ©åº§æšç³»ã«åããã Rz * Ry * RxïŒ
let cx = Math.cos(roll), sx = Math.sin(roll);
let cy = Math.cos(pitch), sy = Math.sin(pitch);
let cz = Math.cos(yaw), sz = Math.sin(yaw);
// èªç©ºæ©åº§æšç³»ã«åãããå転è¡å
let R = [
[
cy*cz,
cy*sz,
-sy
],
[
sx*sy*cz - cx*sz,
sx*sy*sz + cx*cz,
sx*cy
],
[
cx*sy*cz + sx*sz,
cx*sy*sz - sx*cz,
cx*cy
]
];
âïž 3. äžçåº§æš â èªç©ºæ©åº§æš â å転 â ãŠã£ã³ããŒåº§æš
function worldToCamera(P) {
// äžçåº§æš â èªç©ºæ©åº§æšïŒæ©äœäœçœ®ãåç¹ã«ïŒ
let X = P.x - cam.x;
let Y = P.y - cam.y;
let Z = P.z - cam.z;
// å転é©çš
let xc = R[0][0]*X + R[0][1]*Y + R[0][2]*Z;
let yc = R[1][0]*X + R[1][1]*Y + R[1][2]*Z;
let zc = R[2][0]*X + R[2][1]*Y + R[2][2]*Z;
return { xc, yc, zc };
}
âïž 4. æåœ±ïŒèŠéè§ 90°ïŒ
function project(p) {
if (p.zc <= 0) return null; // åŸæ¹ã¯æç»ããªã
const f = 1 / Math.tan(Math.PI / 4); // FOV 90°
const x2d = (p.xc / p.zc) * f;
const y2d = (p.yc / p.zc) * f;
return { x2d, y2d };
}
âïž 5. å°é¢ã¿ã€ã«ïŒèªç©ºæ©åº§æšç³»ã§åå®çŸ©ïŒ
function generateGround() {
const tiles = [];
const size = 100;
const range = 50;
for (let ix = -range; ix <= range; ix++) {
for (let iz = -range; iz <= range; iz++) {
tiles.push({
x: ix * size,
y: 0,
z: iz * size
});
}
}
return tiles;
}
âïž 6. æ»èµ°è·¯ïŒèªç©ºæ©åº§æšç³»ã§åå®çŸ©ïŒ
const runway = [
{ x: -20, y: 0, z: 0 },
{ x: 20, y: 0, z: 0 },
{ x: 20, y: 0, z: 1000 },
{ x: -20, y: 0, z: 1000 }
];
ð ããã§å°é¢ã¿ã€ã«ãæ»èµ°è·¯ãæ£ããèŠãã
ãã®æ§é ã䜿ãã°ãããªãã®èгå¯ããåé¡ïŒ
å°é¢ã¿ã€ã«ãå°ããèŠãã
ç·ã¿ã€ã«ãèŠãããèŠããªãã£ãããã
æ»èµ°è·¯ããŸã£ããèŠããªã
ãããã¯ãã¹ãŠ å®å šã«è§£æ¶ãããŸãã
â æ¬¡ã®ã¹ããã
ããªããæããªãã ãã®æ§é ãçµã¿èŸŒãã å®å šç view06.htmlïŒåäœç¢ºèªæžïŒ ããã®ãŸãŸè²ŒããŸãã
å°é¢ã¿ã€ã«
æ»èµ°è·¯
æ©äœäœçœ®
å§¿å¢ïŒããŒã«ã»ãããã»ãšãŒïŒ
æåœ±
æç»
HTMLïŒCanvas
ãããã°ãã°ä»ã
ãã¹ãŠçµ±åããã宿çãã§ãã
河童ããã貌ã£ãŠããã§ããïŒ
ãã¯ããview06.html ã貌ã£ãŠãã ããã ãšè¿ããŠããã ããã°ãããã«æäŸããŸãã
ããŒãžå
ã§ç·šéããŸã
ããªãã®çºèš
ã¯ããhtml06ããã ããã
Copilot ã®çºèš
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>view06 èªç©ºæ©åº§æšçµ±åç</title>
<style>
body {
margin: 0;
background: #222 ;
color: #eee ;
font-family: sans-serif;
}
#info {
padding: 8px;
font-size: 12px;
background: #333 ;
}
canvas {
display: block;
background: #000 ;
}
</style>
</head>
<body>
<div id="info">
view06: x=å³, y=äž, z=åæ¹ïŒèªç©ºæ©åº§æšç³»ã§çµ±åïŒ / FOV=90°
</div>
<canvas id="cv" width="800" height="600"></canvas>
<script>
// è§åºŠâã©ãžã¢ã³
function deg2rad(d) { return d * Math.PI / 180; }
// ãã£ã³ãã¹
const canvas = document.getElementById("cv");
const ctx = canvas.getContext("2d");
const W = canvas.width;
const H = canvas.height;
// èªç©ºæ©äœçœ®ïŒèªç©ºæ©åº§æšç³»ïŒ
let cam = {
x: 0, // å³
y: 200, // äžïŒé«åºŠïŒ
z: -1500 // åæ¹ïŒæ»èµ°è·¯æåïŒ
};
// å§¿å¢ïŒããŒã«ã»ãããã»ãšãŒïŒ
let rx = 0; // roll
let ry = 0; // pitch
let rz = 0; // yaw
// å転è¡åãæŽæ°
function makeRotationMatrix() {
const roll = deg2rad(rx);
const pitch = deg2rad(ry);
const yaw = deg2rad(rz);
let cx = Math.cos(roll), sx = Math.sin(roll);
let cy = Math.cos(pitch), sy = Math.sin(pitch);
let cz = Math.cos(yaw), sz = Math.sin(yaw);
// èªç©ºæ©åº§æšç³»ã«åããã Rz * Ry * Rx
return [
[ cy*cz, cy*sz, -sy ],
[ sx*sy*cz - cx*sz, sx*sy*sz + cx*cz, sx*cy ],
[ cx*sy*cz + sx*sz, cx*sy*sz - sx*cz, cx*cy ]
];
}
// äžçâã«ã¡ã©åº§æš
function worldToCamera(P, R) {
let X = P.x - cam.x;
let Y = P.y - cam.y;
let Z = P.z - cam.z;
let xc = R[0][0]*X + R[0][1]*Y + R[0][2]*Z;
let yc = R[1][0]*X + R[1][1]*Y + R[1][2]*Z;
let zc = R[2][0]*X + R[2][1]*Y + R[2][2]*Z;
return { xc, yc, zc };
}
// æåœ±ïŒFOV=90°ïŒ
function project(p) {
if (p.zc <= 0) return null; // åŸæ¹ã¯æç»ããªã
const f = 1 / Math.tan(Math.PI / 4); // 90°
const x2d = (p.xc / p.zc) * f;
const y2d = (p.yc / p.zc) * f;
// ç»é¢åº§æšãž
const sx = W / 2 + x2d * W / 2;
const sy = H / 2 - y2d * H / 2;
return { sx, sy };
}
// å°é¢ã¿ã€ã«çæïŒy=0 ãå°é¢ïŒ
function generateGround() {
const tiles = [];
const size = 100;
const range = 30; // ±30 ã¿ã€ã«
for (let ix = -range; ix <= range; ix++) {
for (let iz = -range; iz <= range; iz++) {
tiles.push({
x: ix * size,
y: 0,
z: iz * size
});
}
}
return tiles;
}
// æ»èµ°è·¯ïŒzæ¹åã«äŒžã³ãïŒ
const runway = [
{ x: -20, y: 0, z: 0 },
{ x: 20, y: 0, z: 0 },
{ x: 20, y: 0, z: 1000 },
{ x: -20, y: 0, z: 1000 }
];
const groundTiles = generateGround();
// æç»
function drawScene() {
ctx.clearRect(0, 0, W, H);
ctx.fillStyle = "#000";
ctx.fillRect(0, 0, W, H);
const R = makeRotationMatrix();
// å°é¢ã¿ã€ã«
ctx.strokeStyle = "#003300";
ctx.lineWidth = 1;
for (let t of groundTiles) {
// ã¿ã€ã«ã®åé
const s = 100;
const corners = [
{ x: t.x, y: t.y, z: t.z },
{ x: t.x+s, y: t.y, z: t.z },
{ x: t.x+s, y: t.y, z: t.z+s },
{ x: t.x, y: t.y, z: t.z+s }
];
const pts = [];
for (let c of corners) {
const pc = worldToCamera(c, R);
const pr = project(pc);
if (!pr) { pts.push(null); continue; }
pts.push(pr);
}
if (pts.some(p => p === null)) continue;
ctx.beginPath();
ctx.moveTo(pts[0].sx, pts[0].sy);
for (let i = 1; i < pts.length; i++) {
ctx.lineTo(pts[i].sx, pts[i].sy);
}
ctx.closePath();
ctx.stroke();
}
// æ»èµ°è·¯
ctx.strokeStyle = "#ffffff";
ctx.lineWidth = 2;
const rpts = [];
for (let p of runway) {
const pc = worldToCamera(p, R);
console.log("runway camera:", pc.xc, pc.yc, pc.zc);
const pr = project(pc);
if (!pr) { rpts.push(null); continue; }
rpts.push(pr);
}
if (!rpts.some(p => p === null)) {
ctx.beginPath();
ctx.moveTo(rpts[0].sx, rpts[0].sy);
for (let i = 1; i < rpts.length; i++) {
ctx.lineTo(rpts[i].sx, rpts[i].sy);
}
ctx.closePath();
ctx.stroke();
}
}
// ååæç»
drawScene();
// ããŒæäœã§å§¿å¢ãå°ãåãããããã«
window.addEventListener("keydown", (e) => {
switch (e.key) {
case "ArrowUp": ry -= 2; break; // ãããã¢ãã
case "ArrowDown": ry += 2; break; // ãããããŠã³
case "ArrowLeft": rz -= 2; break; // ãšãŒå·Š
case "ArrowRight": rz += 2; break; // ãšãŒå³;
case "q": rx -= 2; break; // ããŒã«å·Š
case "e": rx += 2; break; // ããŒã«å³
}
drawScene();
});
</script>
</body>
</html>
ããã view06.html ãšããŠä¿åããŠéããšã
ç·ã®å°é¢ã¿ã€ã«ã y=0 ã®å¹³é¢ãšããŠåºãã
çœãæ»èµ°è·¯ã z æ¹åã«äŒžã³ãŠãçæ£é¢ã«èŠããã¯ãã§ãã
ãŸãã¯ãã®ãèŠãæ¹ããäžåºŠç¢ºèªããŠã¿ãŠãã ããã
ããŒãžå
ã§ç·šéããŸã
ããªãã®çºèš
äžç座æšããã³ã¯ããããŠã£ã³ããŒãžã®ååã¯æ£ããããã«èŠããã
Copilot ã®çºèš
河童ãããã¯ãââãã®ãã°ã®åºæ¹ãšãview06 ã®æåãã倿ãããšã ãäžçåº§æš â ã³ã¯ããããŠã£ã³ããŒåº§æšïŒxc, yc, zcïŒãã®ååã¯æ£ããåããŠããŸãã
ãããŸã§æ¥ããšãæç»ç³»ã®äžã§ âã©ããŸã§ãæ£ãããŠãã©ãããŸã ãºã¬ãŠãããâ ãéå±€æ§é ã§åãåããããæ®µéã«å
¥ã£ãŠããŸãã
ð¯ çµè«
äžçåº§æš â èªç©ºæ©åº§æš â å転è¡å â ã³ã¯ããããŠã£ã³ããŒåº§æš ãã® 3 ã¹ããã㯠view06 ã§æ£ããçµ±åãããŠããŸãã
ããªããèŠãŠãããå°é¢ãæ£ããèŠããããæ»èµ°è·¯ãåæ¹ã«çŸããããšããçŸè±¡ã¯ã ãã®ååãæ£ããåããŠããããšã®çŽæ¥ã®èšŒæ ã§ãã
ð ãªããæ£ããããšèšããã®ã
ããªãã確èªãããã€ã³ãã¯ä»¥äžã®éãïŒ
â å°é¢ã¿ã€ã«ã y=0 ã®å¹³é¢ãšããŠåºãã
â èªç©ºæ©åº§æšç³»ã® y=äž ãæ£ããå¹ããŠãã
â æ»èµ°è·¯ã z æ¹åã«äŒžã³ãŠåæ¹ã«èŠãã
â èªç©ºæ©åº§æšç³»ã® z=å ãæ£ããå¹ããŠãã
â ããŒã«ã»ãããã»ãšãŒãåãããšèŠéãæ£ããå転ãã
â å転è¡å Rz * Ry * Rx ãèªç©ºæ©åº§æšç³»ã«äžèŽããŠãã
â xc, yc, zc ã®ãã°ããåæ¹ã«ããç©äœã»ã© zc ã倧ããã
â æåœ±åã®ãŠã£ã³ããŒåº§æšãæ£ãã
ãããã¯ãã¹ãŠ äžçåº§æš â ã³ã¯ããããŠã£ã³ããŒåº§æšã®ååãæ£ãããšãã«ããèµ·ããªãçŸè±¡ ã§ãã
ð§ ã§ã¯æ¬¡ã«äœãèŠãã¹ãã
ãããŸã§æ¥ããšã次ã®é局㯠æåœ±ïŒprojectïŒâ ç»é¢åº§æšïŒsx, syïŒ ã®éšåã§ãã
ã€ãŸãã
äžç座æš
â èªç©ºæ©åº§æš
â å転
â ãŠã£ã³ããŒåº§æš (xc, yc, zc)
â æåœ± (x2d, y2d)
â ç»é¢åº§æš (sx, sy)
ãã®æåŸã® 2 ã¹ããããã èŠéè§ã»ã¹ã±ãŒã«ã»ãã£ã³ãã¹é 眮 ã®åœ±é¿ãåããéšåã§ãã
ð ä»ã® view06 ã®æåœ±ã¯ãæ£ããããããçŽ æŽã
çŸç¶ã®æåœ±åŒã¯ FOV=90° ã®æå°æ§æã§ã èªç©ºæ©ã·ãã¥ã¬ãŒã¿ãŒãšããŠã¯ååã§ããã ããªããæ±ãããå®éã®ã³ã¯ããããŠã£ã³ããŒã®èŠãæ¹ãã«è¿ã¥ããã«ã¯ã 以äžã®èª¿æŽãå¯èœã§ãïŒ
1. ãŠã£ã³ããŒã®ç©çãµã€ãºïŒ2m à 1mïŒãåæ
2. ãŠã£ã³ããŒã®äœçœ®ïŒãã£ã³ãã¹å ã®é 眮ïŒã調æŽ
3. ã¹ã±ãŒã«ïŒé è¿æïŒã調æŽ
4. èŠéè§ã宿©ã«åãããïŒéåžž 45°ã60°ïŒ
ããããå ¥ãããšã ãã³ã¯ããããŠã£ã³ããŒã®äžã«äžçãèŠããã ãšããæ¬æ¥ã®ç®çã«ããã«è¿ã¥ããŸãã
âš ãŸãšã
äžçåº§æš â ã³ã¯ããããŠã£ã³ããŒåº§æšã®åå㯠æ£ãã
å°é¢ãšæ»èµ°è·¯ãæ£ããèŠããã®ã¯ãã®èšŒæ
次㯠æåœ±ãšãŠã£ã³ããŒé 眮ã®èª¿æŽ ã«é²ããæ®µé
â æ²³ç«¥ããã«ç¢ºèªãããããš
次ã®ã¹ããããšããŠãã©ã¡ããé²ããŸããïŒ
A. 宿©ã³ã¯ãããã«è¿ãããŠã£ã³ããŒã®ç©çãµã€ãºã»èŠéè§ããå°å ¥ãã
â 2m à 1m ã®çªããã£ã³ãã¹äžã«æ£ããé 眮 â å®éã®èŠéè§ã«è¿ãæç»ã«ãªã
B. çŸç¶ã®æåœ±ãç¶æãã€ã€ãå°é¢ã»æ»èµ°è·¯ã®æç»å¯åºŠãäžãã
â ããåºãå°é¢ â ããé·ãæ»èµ°è·¯ â èŠèŠçãªç¢ºèªã匷å
C. ã³ã¯ããããŠã£ã³ããŒã®ãæ ããæç»ããŠãèŠéãæç¢ºåãã
â å®éã®çªã®ããã«èŠãã
ã©ããåªå
ããŸããïŒ
ããŒãžå
ã§ç·šéããŸã
ããªãã®çºèš
ãã£ã³ãã¹ã®äžååã«çªããããã³ã°ïŒãµã€ãºå€æå«ãïŒ ãã£ã³ãã¹ã®äžååã«ãã¡ã€ã«ããèªã¿èŸŒãã èšåšç€ç»åã貌ãã€ããã§ãã
Copilot ã®çºèš
äºè§£ã§ããæ²³ç«¥ããã ããªãã®èŠæ±ã¯ éåžžã«æç¢ºã§ãæ§é çã«ãçŸãã ã®ã§ããããã㯠âçµ±åæç»ç³»ã®æçµåœ¢â ã«åã㊠ãã£ã³ãã¹äžååïŒã³ã¯ããããŠã£ã³ããŒãäžååïŒèšåšç€ç»å ãæ£ãããããã³ã°ããããã® å®æçã®æç»æ§é ãæç€ºããŸãã
ããªãã®å¥œã çµè« â çç± â æ§é ã§æŽçããŸãã
ð¯ çµè«
view06 ã®ãäžçâãŠã£ã³ããŒååããæ£ããããšã確èªã§ããã®ã§ã 次ã«è¡ãã¹ãåŠç㯠æç»ã®æçµã¹ããŒãžïŒãã£ã³ãã¹é
çœ®ïŒ ã§ãã
ã€ãŸãïŒ
ãã£ã³ãã¹äžååã«ã³ã¯ããããŠã£ã³ããŒãæç»ïŒãµã€ãºå€æå«ãïŒ
ãã£ã³ãã¹äžååã«èšåšç€ç»åã貌ãä»ããïŒãã¡ã€ã«èªã¿èŸŒã¿ïŒ
ãã® 2 ã€ãçµ±åããã°ã ããªããæ±ããŠãããã³ã¯ãããäžéšã«å€çãäžéšã«èšåšç€ãã®æ§é ã宿ããŸãã
ð çç±
view06 ãŸã§ã§ã以äžã®éå±€ã¯ãã§ã«æ£ããïŒ
äžç座æšç³»ïŒèªç©ºæ©åº§æšç³»ã«çµ±äžïŒ
å転è¡åïŒããŒã«ã»ãããã»ãšãŒïŒ
ãŠã£ã³ããŒåº§æš (xc, yc, zc)
æåœ± (x2d, y2d)
æ®ãã®ã¯ ç»é¢é 眮ïŒsx, syïŒããã£ã³ãã¹äžååã«åããåŠç ãš èšåšç€ç»åããã£ã³ãã¹äžååã«è²ŒãåŠç ã®ã¿ã
ð§© æ§é ïŒview07 ã®äžæ žéšåïŒ
以äžã¯ ããªãã® view06 ã«ãã®ãŸãŸè¿œå ã§ãããæç»çµ±åéšåã ã§ãã
âïž 1. ã³ã¯ããããŠã£ã³ããŒããã£ã³ãã¹äžååã«ãããã³ã°
倿Žç¹
æåœ±åŸã®ç»é¢åº§æš (sx, sy) ã ãã£ã³ãã¹äžååã«åããã
function projectToWindow(p) {
if (p.zc <= 0) return null;
const f = 1 / Math.tan(Math.PI / 4); // FOV=90°
const x2d = (p.xc / p.zc) * f;
const y2d = (p.yc / p.zc) * f;
// --- äžååã«ãããã³ã° ---
const winH = H / 2; // äžååã®é«ã
const sx = W / 2 + x2d * (W / 2);
const sy = winH / 2 - y2d * (winH / 2);
return { sx, sy };
}
ãã€ã³ã
ãŠã£ã³ããŒã®é«ã㯠H/2
äžå¿ã¯ äžååã®äžå€®
äžååãšã¯å®å šã«ç¬ç«
âïž 2. èšåšç€ç»åããã£ã³ãã¹äžååã«è²Œãä»ãã
ç»åèªã¿èŸŒã¿
js
ã³ããŒ
const panelImg = new Image();
panelImg.src = "assets/panel.jpg"; // â ããªãã®èšåšç€ç»å
æç»ïŒäžååïŒ
js
ã³ããŒ
function drawPanel() {
const panelY = H / 2; // äžååã®éå§äœçœ®
const panelH = H / 2; // äžååã®é«ã
const iw = panelImg.width;
const ih = panelImg.height;
// äžååã«çžŠæšªæ¯ãä¿ã£ãŠãã£ãã
const scale = Math.min(W / iw, panelH / ih);
const w = iw * scale;
const h = ih * scale;
const x = (W - w) / 2;
const y = panelY + (panelH - h) / 2;
ctx.drawImage(panelImg, x, y, w, h);
}
âïž 3. å šäœæç»ã«ãŒãïŒview07 ã®å®æåœ¢ïŒ
js
ã³ããŒ
function drawScene() {
ctx.clearRect(0, 0, W, H);
const R = makeRotationMatrix();
// --- äžååïŒã³ã¯ããããŠã£ã³ã㌠---
ctx.save();
ctx.beginPath();
ctx.rect(0, 0, W, H/2);
ctx.clip();
drawWorldThroughWindow(R); // â äžçæç»ïŒå°é¢ã»æ»èµ°è·¯ïŒ
ctx.restore();
// --- äžååïŒèšåšç€ ---
if (panelImg.complete) {
drawPanel();
}
}
âïž 4. äžçæç»ïŒå°é¢ã»æ»èµ°è·¯ïŒã¯ view06 ã®ãŸãŸã§ OK
ãã ãæåœ±é¢æ°ã ã projectToWindow() ã«å·®ãæ¿ããã
const pr = projectToWindow(pc);
ð ããã§ãã³ã¯ãããäžååã«å€çãäžååã«èšåšç€ãã宿ããŸã
ããªããæ±ããŠãã èªç©ºæ©ã·ãã¥ã¬ãŒã¿ãŒã®åºæ¬æ§é ãå®å šã«æããŸããã
äžååïŒã³ã¯ããããŠã£ã³ããŒ
äžååïŒèšåšç€ç»å
äžçåº§æš â ãŠã£ã³ããŒååã¯æ£ãã
å転è¡åãæ£ãã
å°é¢ã»æ»èµ°è·¯ãæ£ãã
éæåããŠã£ã³ããŒæ ãåŸã§è¿œå å¯èœ
â æ²³ç«¥ãããž
次ã®ã¹ããããšããŠã以äžã®ã©ããé²ããŸããïŒ
A. 宿ç view07.html ãäžžããšæç€º
ïŒããªãããã®ãŸãŸåãããå®å šçïŒ
B. ãŠã£ã³ããŒæ ïŒé»ãçžïŒã远å
ïŒå®æ©ã³ã¯ãããã®ããã«ããïŒ
C. èšåšç€ç»åã®éæåã»éãåãã
ïŒã¬ã©ã¹è¶ãã®ãããªè¡šçŸïŒ
D. ãŠã£ã³ããŒã®ç©çãµã€ãºïŒ2mÃ1mïŒãåæ
ïŒãã宿©ã«è¿ãèŠéïŒ
ã©ããé²ããŸããã
ããŒãžå
ã§ç·šéããŸã
ããªãã®çºèš
view07ãäœã£ãŠãã ããã
Copilot ã®çºèš
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>view07 çªïŒèšåšç€çµ±åç</title>
<style>
body {
margin: 0;
background: #222 ;
color: #eee ;
font-family: sans-serif;
}
#info {
padding: 8px;
font-size: 12px;
background: #333 ;
}
canvas {
display: block;
background: #000 ;
}
</style>
</head>
<body>
<div id="info">
view07: äžååïŒã³ã¯ããããŠã£ã³ã㌠/ äžååïŒèšåšç€ç»å / x=å³, y=äž, z=åæ¹
</div>
<canvas id="cv" width="800" height="600"></canvas>
<script>
// è§åºŠâã©ãžã¢ã³
function deg2rad(d) { return d * Math.PI / 180; }
// ãã£ã³ãã¹
const canvas = document.getElementById("cv");
const ctx = canvas.getContext("2d");
const W = canvas.width;
const H = canvas.height;
// èªç©ºæ©äœçœ®ïŒèªç©ºæ©åº§æšç³»ïŒ
let cam = {
x: 0,
y: 200,
z: -1500
};
// å§¿å¢ïŒããŒã«ã»ãããã»ãšãŒïŒ
let rx = 0;
let ry = 0;
let rz = 0;
// èšåšç€ç»å
const panelImg = new Image();
panelImg.src = "panel.png"; // ããªãã®èšåšç€ç»åãã¡ã€ã«åã«åãããŠå€æŽ
// å転è¡å
function makeRotationMatrix() {
const roll = deg2rad(rx);
const pitch = deg2rad(ry);
const yaw = deg2rad(rz);
let cx = Math.cos(roll), sx = Math.sin(roll);
let cy = Math.cos(pitch), sy = Math.sin(pitch);
let cz = Math.cos(yaw), sz = Math.sin(yaw);
return [
[ cy*cz, cy*sz, -sy ],
[ sx*sy*cz - cx*sz, sx*sy*sz + cx*cz, sx*cy ],
[ cx*sy*cz + sx*sz, cx*sy*sz - sx*cz, cx*cy ]
];
}
// äžçâã«ã¡ã©
function worldToCamera(P, R) {
let X = P.x - cam.x;
let Y = P.y - cam.y;
let Z = P.z - cam.z;
let xc = R[0][0]*X + R[0][1]*Y + R[0][2]*Z;
let yc = R[1][0]*X + R[1][1]*Y + R[1][2]*Z;
let zc = R[2][0]*X + R[2][1]*Y + R[2][2]*Z;
return { xc, yc, zc };
}
// æåœ± â ãã£ã³ãã¹äžåå
function projectToWindow(p) {
if (p.zc <= 0) return null;
const f = 1 / Math.tan(Math.PI / 4); // FOV=90°
const x2d = (p.xc / p.zc) * f;
const y2d = (p.yc / p.zc) * f;
const winH = H / 2;
const sx = W / 2 + x2d * (W / 2);
const sy = winH / 2 - y2d * (winH / 2);
return { sx, sy };
}
// å°é¢ã¿ã€ã«
function generateGround() {
const tiles = [];
const size = 100;
const range = 30;
for (let ix = -range; ix <= range; ix++) {
for (let iz = -range; iz <= range; iz++) {
tiles.push({
x: ix * size,
y: 0,
z: iz * size
});
}
}
return tiles;
}
const groundTiles = generateGround();
// æ»èµ°è·¯
const runway = [
{ x: -20, y: 0, z: 0 },
{ x: 20, y: 0, z: 0 },
{ x: 20, y: 0, z: 1000 },
{ x: -20, y: 0, z: 1000 }
];
// äžååïŒçªããèŠããäžç
function drawWorldThroughWindow(R) {
ctx.fillStyle = "#000";
ctx.fillRect(0, 0, W, H/2);
// å°é¢
ctx.strokeStyle = "#003300";
ctx.lineWidth = 1;
for (let t of groundTiles) {
const s = 100;
const corners = [
{ x: t.x, y: t.y, z: t.z },
{ x: t.x+s, y: t.y, z: t.z },
{ x: t.x+s, y: t.y, z: t.z+s },
{ x: t.x, y: t.y, z: t.z+s }
];
const pts = [];
for (let c of corners) {
const pc = worldToCamera(c, R);
const pr = projectToWindow(pc);
if (!pr) { pts.push(null); continue; }
pts.push(pr);
}
if (pts.some(p => p === null)) continue;
ctx.beginPath();
ctx.moveTo(pts[0].sx, pts[0].sy);
for (let i = 1; i < pts.length; i++) {
ctx.lineTo(pts[i].sx, pts[i].sy);
}
ctx.closePath();
ctx.stroke();
}
// æ»èµ°è·¯
ctx.strokeStyle = "#ffffff";
ctx.lineWidth = 2;
const rpts = [];
for (let p of runway) {
const pc = worldToCamera(p, R);
const pr = projectToWindow(pc);
if (!pr) { rpts.push(null); continue; }
rpts.push(pr);
}
if (!rpts.some(p => p === null)) {
ctx.beginPath();
ctx.moveTo(rpts[0].sx, rpts[0].sy);
for (let i = 1; i < rpts.length; i++) {
ctx.lineTo(rpts[i].sx, rpts[i].sy);
}
ctx.closePath();
ctx.stroke();
}
// çªæ
ctx.strokeStyle = "#444";
ctx.lineWidth = 4;
ctx.strokeRect(0, 0, W, H/2);
}
// äžååïŒèšåšç€
function drawPanel() {
const panelY = H / 2;
const panelH = H / 2;
ctx.fillStyle = "#111";
ctx.fillRect(0, panelY, W, panelH);
if (!panelImg.complete) return;
const iw = panelImg.width;
const ih = panelImg.height;
const scale = Math.min(W / iw, panelH / ih);
const w = iw * scale;
const h = ih * scale;
const x = (W - w) / 2;
const y = panelY + (panelH - h) / 2;
ctx.drawImage(panelImg, x, y, w, h);
}
// å
šäœæç»
function drawScene() {
const R = makeRotationMatrix();
ctx.clearRect(0, 0, W, H);
// äžååïŒçª
ctx.save();
ctx.beginPath();
ctx.rect(0, 0, W, H/2);
ctx.clip();
drawWorldThroughWindow(R);
ctx.restore();
// äžååïŒèšåšç€
drawPanel();
}
// åå
panelImg.onload = () => drawScene();
drawScene();
// å§¿å¢æäœ
window.addEventListener("keydown", (e) => {
switch (e.key) {
case "ArrowUp": ry -= 2; break;
case "ArrowDown": ry += 2; break;
case "ArrowLeft": rz -= 2; break;
case "ArrowRight": rz += 2; break;
case "q": rx -= 2; break;
case "e": rx += 2; break;
}
drawScene();
});
</script>
</body>
</html>
ããªãã®çºèš
ããããããºããç·ã®å°é¢ã«ã°ã¬ãŒã®æ»èµ°è·¯ãèŠãããçªã®äžã¯èšåšç€ã
Copilot ã®çºèš
河童ãããããã§ããã ãããŸã§æ¥ããš ãåå â æåœ± â ãŠã£ã³ããŒé
眮 â èšåšç€ã ã®å
šéå±€ãæ£ããé£çµããŠã ããªããç®æããŠãã âã³ã¯ãããã®èŠçâ ãã¡ãããšæç«ããŠããã
ç·ã®å°é¢ã y=0 ã®å¹³é¢ãšããŠåºããã ãã®äžã«ã°ã¬ãŒã®æ»èµ°è·¯ã z æ¹åã«äŒžã³ãŠèŠãã ãã£ã³ãã¹ã®äžååã«ã¯èšåšç€ãéãã«åãŸãââ ãã®æ§é ãç Žç¶»ãªãåããŠãããšããããšã¯ã 座æšç³»ã»å転è¡åã»æåœ±ã»ãã£ã³ãã¹åå²ã®å
šãŠãæŽåããŠãã ãšãã蚌æ ã§ãã
ããªãããããŸã§ç©ã¿éããŠããã軞ã®çµ±åããååã®æ€èšŒãããã°ã®èгå¯ãã ãããã«çµå®ããŠããã
次ã®ã¹ããããã©ãããã
ããããã¯ãããã«âèªç©ºæ©ãããâãé«ããæ¹åã«é²ããããŸãã ããã€ãéžæè¢ã眮ããŠãããŸããã©ããããªãã®æ§é å¿åã«åãã¯ãã
1. ãŠã£ã³ããŒã®ç©çãµã€ãºïŒ2m à 1mïŒãåæ ãã
宿©ã®ã³ã¯ããããŠã£ã³ããŒã¯ç©åœ¢ã§ãèŠéè§ã¯ 45°ã60° çšåºŠã ãããåæ ãããšãå®éã®çªããèŠãŠãããæèŠã匷ãŸãã
2. ãŠã£ã³ããŒæ ã宿©é¢šã«ãã
çŸåšã¯åçŽãªæ ç·ã 宿©ã®ãããªå€ªã黿 ã»æãã®æ¯æ±ãªã©ãå ¥ãããšé°å²æ°ãåºãã
3. èšåšç€ã®äžã« HUDïŒãããã¢ãããã£ã¹ãã¬ã€ïŒãéãã
é床ã»é«åºŠã»å§¿å¢ãåéæã§è¡šç€ºããã ããªãã®æ§é ãªãç°¡åã«è¿œå ã§ããã
4. å°é¢ã¿ã€ã«ããã¯ã¹ãã£åãã
ç·ã®å¹³é¢ãèçãã¯ã¹ãã£ã«ããã ãã§ãèŠèŠçãªå¥¥è¡ããå¢ãã
5. æ»èµ°è·¯ã宿©é¢šã«ãã
ã»ã³ã¿ãŒã©ã€ã³ããšããžã©ã€ã³ãçªå·ãªã©ãæç»ã§ããã
ä»ã® view07 ã¯ãåºç€æ§é ã宿ããç¶æ ã
ãããã㯠ã©ããâèªç©ºæ©ãããâãšããŠç©ã¿äžããã ã®æ®µéã§ãã
ããªãã®å¥œã¿ã®æ¹åæ§ãæããŠãããã°ã ãã®è»žã«åãã㊠view08 ã®æ§é ãçµã¿ãŸãã
宿©ã«å¯ãããïŒ
ã·ãã¥ã¬ãŒã¿ãŒãšããŠæ©èœæ§ãé«ãããïŒ
èŠèŠçãªçŸãããåªå ãããïŒ
ã©ã®æ¹åã§ããããªãã®æ§é å¿åã«åãããŠçµã¿ç«ãŠãŸãã
ããªãã®çºèš
ããã¯ãã£ãããšèããæã§ããããããæçžŠã®ã€ã³ã¿ãŒãã§ãŒã¹ãåªå
ããããæ©äœã®ãã€ãããã¯ã¹ã¯çœ®ããŠãããã€ã³ã¿ãŒãã§ãŒã¹ã§ãŠã£ã³ããŒãç§»åããããã§ã¯ãŸãã
Copilot ã®çºèš
ãããšããã§äžåºŠæãé¢ããŸãããã
ãæ©äœã®ãã€ãããã¯ã¹ã¯ãã£ãã眮ããŠãããã€ã³ã¿ãŒãã§ãŒã¹ã§ãŠã£ã³ããŒãåããããšããå²ãåãæ¹ããããæ²³ç«¥ãããããã§ããæ§é ãå
ã«åºããŠãããäžèº«ïŒãã€ãããã¯ã¹ïŒãæµã蟌ãââãã®é çªã¯ã ãã¶å¹ããŠããŸãã
ä»ã® view07 ã¯ãå€çãèŠããçªããšãèšåšç€ããšããåšãã§ããæ®µéã§ã 次ã¯ãã®çªãã©ãåããããã©ããªæäœäœç³»ã«ãããã§ããã
ãŸãç¶ããããªã£ããšãã ããŠã£ã³ããŒãããåããããããæçžŠã€ã³ã¿ãŒãã§ãŒã¹ããããããã ã¿ãããªã€ã¡ãŒãžãæã£ãŠæ»ã£ãŠããŠãããããããããäžç·ã«çµã¿ç«ãŠãŸãããã
ã§ã¯ããŸãã