시안 가미 히메의 방형 조형술을 재현 해 보았다
2490 단어 동방탄막풍수학동방 Project
소개
이 기사는 동방귀형 짐승 6면 보스 시안 신카즈히메의 구형 조형술을 재현하기 위한 해설을 한다.
해설에는 삼각비를 사용하기 때문에, 열람에 있어서는 그것에 관한 지식을 가지고 있는 것이 바람직하다. 다만, 본 기사의 마지막에 탄막을 재현하는 스크립트의 예도 나타내고 있으므로 「잘 모르지만 놀아 본다」라고 하는 것도 가능하다.
재현하는 탄막
이번에 재현하는 것은 아래 그림과 같이 「전방위를 향해 구형에 총알을 쏘는 탄막」이다. 이하에서는이 탄막을 「사각형 탄막」이라고 부른다.
해설
한 점에서 모든 방위를 향해 같은 속도로 탄을 발사하면 단위 시간당 진행되는 탄의 거리가 모두 같기 때문에 탄막은 원형이 된다. 이것을 사각형으로 만들기 위해서는 발사각에 따라 탄의 속도를 바꿔야합니다. 왜냐하면 원은 어느 각도라도 중심으로부터의 거리가 동일한 도형이지만, 구형은 다르기 때문이다.
1
따라서, 하는 것은 각도에 따른 속도를 구하는 것이지만, 속도는 「단위 시간당으로 진행하는 거리」이므로, 결국 위 그림에서 말하는 황색의 선의 길이를 생각하면 좋다 .
직각 삼각형 OAB에 주목하면, 삼각비의 정의로부터
\cos\theta=\frac{\mathrm{OB}}{\mathrm{OA}}
\Leftrightarrow
\mathrm{OA}=\frac{\mathrm{OB}}{\cos\theta}
라는 것을 알 수 있습니다. 이것을 이용하여 탄의 속도를 설정하면된다.
스크립트
위의 논의를 바탕으로 실제로 동방 탄막풍 v0.12m에서 구형 탄막을 재현하는 함수를 작성한 예를 제시한다.
// x: 発射場所のx座標
// y: 発射場所のy座標
// speed: 最も遅い弾の発射速度
// angle: 方形のある1辺の中点に来る弾の発射角
// grf: 弾画像
// delay: 遅延時間
// way: 45°あたりの弾の数
function Square(x,y,speed,angle,grf,delay,way) {
let gap = 45/way;
loop(4) {
ascent(i in 0..way) {
CreateShot01(x,y,speed*1/cos(gap*i),angle+gap*i,grf,delay);
}
angle += 45;
ascent(i in 0..way) {
CreateShot01(x,y,speed*1/cos(45-gap*i),angle+gap*i,grf,delay);
}
angle += 45;
}
}
다음 그림은 위의 스크립트에서 수행하는 작업의 이미지 다이어그램입니다. 아래 그림에서는 화살표의 방향이 반시계 방향으로 되어 있지만, 동방탄막풍에서는 「각도의 양의 방향=시계 방향」으로 되어 있는 것을 유의해 두는 것이 좋다.
기타
이번에 재현하는 것은 아래 그림과 같이 「전방위를 향해 구형에 총알을 쏘는 탄막」이다. 이하에서는이 탄막을 「사각형 탄막」이라고 부른다.
해설
한 점에서 모든 방위를 향해 같은 속도로 탄을 발사하면 단위 시간당 진행되는 탄의 거리가 모두 같기 때문에 탄막은 원형이 된다. 이것을 사각형으로 만들기 위해서는 발사각에 따라 탄의 속도를 바꿔야합니다. 왜냐하면 원은 어느 각도라도 중심으로부터의 거리가 동일한 도형이지만, 구형은 다르기 때문이다.
1
따라서, 하는 것은 각도에 따른 속도를 구하는 것이지만, 속도는 「단위 시간당으로 진행하는 거리」이므로, 결국 위 그림에서 말하는 황색의 선의 길이를 생각하면 좋다 .
직각 삼각형 OAB에 주목하면, 삼각비의 정의로부터
\cos\theta=\frac{\mathrm{OB}}{\mathrm{OA}}
\Leftrightarrow
\mathrm{OA}=\frac{\mathrm{OB}}{\cos\theta}
라는 것을 알 수 있습니다. 이것을 이용하여 탄의 속도를 설정하면된다.
스크립트
위의 논의를 바탕으로 실제로 동방 탄막풍 v0.12m에서 구형 탄막을 재현하는 함수를 작성한 예를 제시한다.
// x: 発射場所のx座標
// y: 発射場所のy座標
// speed: 最も遅い弾の発射速度
// angle: 方形のある1辺の中点に来る弾の発射角
// grf: 弾画像
// delay: 遅延時間
// way: 45°あたりの弾の数
function Square(x,y,speed,angle,grf,delay,way) {
let gap = 45/way;
loop(4) {
ascent(i in 0..way) {
CreateShot01(x,y,speed*1/cos(gap*i),angle+gap*i,grf,delay);
}
angle += 45;
ascent(i in 0..way) {
CreateShot01(x,y,speed*1/cos(45-gap*i),angle+gap*i,grf,delay);
}
angle += 45;
}
}
다음 그림은 위의 스크립트에서 수행하는 작업의 이미지 다이어그램입니다. 아래 그림에서는 화살표의 방향이 반시계 방향으로 되어 있지만, 동방탄막풍에서는 「각도의 양의 방향=시계 방향」으로 되어 있는 것을 유의해 두는 것이 좋다.
기타
\cos\theta=\frac{\mathrm{OB}}{\mathrm{OA}}
\Leftrightarrow
\mathrm{OA}=\frac{\mathrm{OB}}{\cos\theta}
위의 논의를 바탕으로 실제로 동방 탄막풍 v0.12m에서 구형 탄막을 재현하는 함수를 작성한 예를 제시한다.
// x: 発射場所のx座標
// y: 発射場所のy座標
// speed: 最も遅い弾の発射速度
// angle: 方形のある1辺の中点に来る弾の発射角
// grf: 弾画像
// delay: 遅延時間
// way: 45°あたりの弾の数
function Square(x,y,speed,angle,grf,delay,way) {
let gap = 45/way;
loop(4) {
ascent(i in 0..way) {
CreateShot01(x,y,speed*1/cos(gap*i),angle+gap*i,grf,delay);
}
angle += 45;
ascent(i in 0..way) {
CreateShot01(x,y,speed*1/cos(45-gap*i),angle+gap*i,grf,delay);
}
angle += 45;
}
}
다음 그림은 위의 스크립트에서 수행하는 작업의 이미지 다이어그램입니다. 아래 그림에서는 화살표의 방향이 반시계 방향으로 되어 있지만, 동방탄막풍에서는 「각도의 양의 방향=시계 방향」으로 되어 있는 것을 유의해 두는 것이 좋다.
기타
사각형의 "중심"은 대각선 교차점을 고려해야합니다.
Reference
이 문제에 관하여(시안 가미 히메의 방형 조형술을 재현 해 보았다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/denkiuo604/items/73c9baeee1ff1173fb47텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)