문제

인 삼각형(이등변삼각형)이동하면 화면과 같은 시간에 약간의 회전 경우 사용자 프레스 방향 키(같은 오른쪽 또는 왼쪽).

고 싶 코(최고점)의 삼각형을 이끌 삼각형이다.(는 옛 소행성 게임).

나의 문제이 가진 수학 이 뒤에.에서 매 X 시간 간격,내가 원하는 삼각형에서 이동하는"일부 방향",나를 찾는 데 도움이 필요 이 방향으로(x,y 증가/감소).

I 을 찾을 수 있습니다 중심점(중심)의 삼각형,그리고 나는 최고의 대부분의 x y 점,그래서 나는 라인 벡터로 작업하지만,단서는 방법""습니다.

나는 그것을 할 수있는 뭔가가 이전 Sin Cos 방법 및 금액(각도)삼각형이 회전되었지만,나는 약간 녹슨에는 물건입니다.

어떤 도움을 진심으로 감사합니다.

도움이 되었습니까?

해결책

vx와 vy가 (Centroid-> Tip) 벡터의 구성 요소 인 Vy/VX의 ArcTangent (역 탄젠트)는 벡터가 향하는 각도를 제공합니다.

고전적인 아크 탕젠트는 -90 ° <r < +90 ° °로 정규화 된 각도를 제공하므로 결과의 부호와 VX의 부호에 따라 결과에서 90도를 추가하거나 빼야합니다.

운 좋게도 표준 라이브러리는 VX와 VY를 별도로 매개 변수로 취하는 ATAN2 () 함수를 예상하고 0 ° ~ 360 ° 또는 -180 ° 및 +180 ° 도의 각도를 반환해야합니다. 또한 VX = 0 인 특별 사례를 다룰 것입니다.

보다 http://www.arctangent.net/atan.html 또는 "arctangent"를 검색하십시오.

편집 : 명확성을 위해 게시물에서 학위를 사용했지만 Java와 다른 많은 언어/라이브러리는 180 ° = π 인 라디안에서 작동합니다.

또한 삼각형의 점에 VX와 VY를 추가하여 "앞으로"방향으로 움직일 수 있지만 벡터가 정규화되어 있는지 확인하십시오 (vx² + vy² = 1). 그렇지 않으면 속도는 삼각형의 크기에 따라 다릅니다.

다른 팁

@표시:

나는이 답변 상자에 벡터, 좌표, 점 및 각도에 프라이머를 두 번 쓰려고했지만 두 경우가 너무 오래 걸리고 두 경우에 마음이 바뀌었고 나보다 더 잘 설명하는 많은 튜토리얼이 있다고 확신합니다. 할 수 있습니다.

중심 및 "팁"좌표는 벡터가 아닙니다. 즉, 벡터로 생각할 때 얻을 수있는 것은 없습니다.

원하는 벡터 인 vforward = ptip -pcentroid는 중심 지점에서 "팁"코너의 좌표를 빼서 계산할 수 있습니다. 이 벡터의 atan2 (), 즉 atan2 (tipy-cent, tipx-centx)는 삼각형이 "향하는"각도를 제공합니다.

그것이 무엇인지에 관해서는 중요하지 않습니다. 라이브러리는 아마도 증가하는 X 축 (---> 아마도 당신이 본 모든 2D 그래프의 오른쪽/동쪽 방향)이 0 ° 또는 0π라는 규칙을 사용할 것입니다. 증가하는 Y (상단, 북쪽) 방향은 90 ° 또는 (1/2) π에 해당합니다.

삼각형의 회전 각도를 저장 해야하는 것 같습니다. 아마도 현재 속도 일 것입니다.

x' = x + speed * cos(angle)
y' = y + speed * sin(angle)

각도는 각도가 아니라 라디안에 있습니다!

라디안 =도 * Radiansinacircle / Degreesinacircle

Radiansinacircle = 2 * pi

Degressinacircle = 360

정점의 위치의 경우 각각은 중앙에서 특정 거리와 각도에 있습니다. 이 계산을 수행하기 전에 현재 회전 각도를 추가하십시오. 운동을 알아내는 것과 같은 수학입니다.

다음은 다음과 같습니다.

벡터는 변위를 나타냅니다. 변위, 번역, 움직임 또는 당신이 부르고 싶은 모든 것이 출발점 없이는 의미가 없기 때문에 위의 "중심"벡터를 "중심에서"로 언급 한 이유입니다. 그래서 "중심 벡터"가 벡터가있는 이유입니다. 중심 지점의 X/Y 구성 요소는 의미가 없습니다. 이러한 구성 요소는 원점에서 중심점의 변위를 제공합니다. 다시 말해, Porigin + vcentroid = pcentroid. 0 포인트에서 시작하면 Centroid Point의 변위를 나타내는 벡터를 추가하면 Centroid 포인트가됩니다.

주목하십시오 :

벡터 + 벡터 = 벡터
(두 가지 변위를 추가하면 세 번째, 다른 변위가 있습니다)

점 + 벡터 = 포인트
(포인트 이동/대체는 또 다른 포인트를 제공합니다)

포인트 + 포인트 = ???
(두 점을 추가하는 것은 의미가 없습니다. 그러나 :)

포인트 - 점 = 벡터
(두 지점의 차이는 그들 사이의 변위입니다)

이제 이러한 변위는 (적어도) 두 가지 다른 방식으로 생각할 수 있습니다. 당신이 이미 익숙한 것은입니다 직사각형 (x, y) 벡터의 두 성분이 각각 x 및 y 방향으로 변위를 나타냅니다. 그러나 사용할 수도 있습니다 극선 좌표, (r, θ). 여기서 θ는 변위 방향 (중재 제로 각도에 대한 각도로)과 R, RIVERION을 나타냅니다.

예를 들어 (1, 1) 벡터를 취하십시오. 그것은 우리 모두가 보았던 좌표계에서 하나의 단위를 오른쪽으로, 하나의 단위를 위쪽으로 위쪽으로 나타냅니다. 이 벡터의 극성은 (1.414, 45 °); 동일한 움직임이지만 "45 ° 방향 방향으로 1.414 단위의 변위로 표시됩니다. (다시, 동쪽 방향이 0 °이고 각도가 반 시계 방향으로 증가하는 편리한 극 좌표계를 사용합니다.)

극과 직사각형 좌표 사이의 관계는 다음과 같습니다.

θ = atan2 (y, x)
r = sqrt (x²+y²) (이제 오른쪽 삼각형이 어디로 들어 오는지 알 수 있습니까?)

반대로,

x = r * cos (θ)
y = r * sin (θ)

이제 삼각형의 중심에서 "팁"코너로 그려진 라인 세그먼트가 삼각형의 방향을 나타 내기 때문에, 우리가 해당 라인과 평행 한 벡터를 얻으려면 (예 : vforward = ptip -pcentroid), 그 벡터의 θ 좌표는 삼각형이 직면하는 각도에 해당합니다.

(1, 1) 벡터를 다시 가져갑니다. 이것이 vforward라면, "팁"포인트의 X와 Y 좌표가 Centroid의 것보다 1이 더 많았을 것입니다. 중심이 켜져 있다고 가정 해 봅시다 (10, 10). 그것은 "팁"코너를 (11, 11)에 올려 놓습니다. (기억하다, ptip = pcentroid + vforward 이전 방정식의 양쪽에 "+ pcentroid"를 추가함으로써.) 이제이 삼각형은 어느 방향으로 향하고 있습니까? 45 °, 맞습니까? 그것이 우리 (1, 1) 벡터의 θ- 조정입니다!

중심을 원점에 보관하십시오. 중심에서 코까지의 벡터를 방향 벡터로 사용하십시오. http://en.wikipedia.org/wiki/coordinate_rotation#two_dimensions 이 벡터가 회전합니다. 이 벡터에서 다른 두 지점을 구성하십시오. 세 지점을 화면의 위치로 번역하고 그리십시오.

double v; // velocity
double theta; // direction of travel (angle)
double dt; // time elapsed

// To compute increments
double dx = v*dt*cos(theta);
double dy = v*dt*sin(theta);

// To compute position of the top of the triangle
double size; // distance between centroid and top
double top_x = x + size*cos(theta);
double top_y = y + size*sin(theta);

나는 공통 2D 회전 공식을 삼각형에 적용하여 결과를 얻을 필요가 있음을 알 수 있습니다. 여기서 다른 구성 요소 간의 관계에 약간의 문제가 있습니다.

AIB, 다음과 같이 말했습니다.

vx와 vy가 (Centroid-> Tip) 벡터의 구성 요소 인 Vy/VX의 ArcTangent (역 탄젠트)는 벡터가 향하는 각도를 제공합니다.

vx와 vy는 Centriod 또는 Tip의 x 및 y coord입니까? 나는 여기서 "벡터"의 용어에 대해 혼란스러워하고 있다고 생각합니다. 나는 벡터가 방향을 나타내는 2D (이 경우) 공간의 한 지점이라는 인상을 받았다.

이 경우 중심-> 팁의 벡터는 어떻게 계산됩니까? 중심인가?

meyahoocomlorenpechtel 정해진:

삼각형의 회전 각도를 저장 해야하는 것 같습니다. 아마도 현재 속도 일 것입니다.

에 대한 회전 각도는 무엇입니까? 삼각형의 기원 또는 게임 창 자체? 또한 향후 회전의 경우 각도는 마지막 회전의 각도 또는 삼각형의 원래 위치입니까?

지금까지 도와 주셔서 감사합니다. 정말 감사합니다!

원하는 효과를 달성하기 위해 최상위 정점이 중심이되기를 원할 것입니다.

첫째,내가 시작과 중심보다는 계산합니다.당신이 알고있는 위치의 중심이와 회전각도의 삼각형을,내가 이것을 사용하여 계산하의 위치 verticies.(하기 위해 어떤 구문 오류는,나만의 손에서 Java.)

//출발점

double tip_x = 10;
double tip_y = 10;

should be

double center_x = 10;
double center_y = 10;

//삼각형의 세부 사항

int width = 6; //base
int height = 9;

어야 한 배열의 3 각도 거리 쌍이다.

angle = rotation_angle + vertex[1].angle;
dist = vertex[1].distance;    
p1_x = center_x + math.cos(angle) * dist;
p1_y = center_y - math.sin(angle) * dist;
// and the same for the other two points

참고 나 Y 거리입니다.당신이 걸려는 사실에 의해 화면 공간이 거꾸로 한다.우리의 마음에 Y 으로 증가를 가지는 화면 좌표를 작동하지 않는 방법입니다.

수학은 훨씬 더 간단하는 경우 추적할 것으로 위치하고 회전각이 아닌 파생하는 회전 각도.

또한,최종 조각의 코드를 수정하는 위치에 의해 회전 각도.그 결과는 당신의 선박 회전에 의해 회전 각도는 모든 업데이트 주기입니다.내가 생각하는 목적은 뭔가가 다음과 같행지,고양이를 쫓는 그것의 꼬리!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top