점이 사각형 주위를 이동하는 멋진 애니메이션을 만들고 싶습니다. 한 번에 포인트의 위치를 찾고 싶습니다 t
.
사각형이 주어진다 X
, Y
, Width
와 Height
.
이에 대한 알고리즘이 있습니까?
내가 사용했습니다 sin
/ cos
원하십시오. 사각형에 대한 동등한 접근 방법은 무엇입니까?
점이 사각형 주위를 이동하는 멋진 애니메이션을 만들고 싶습니다. 한 번에 포인트의 위치를 찾고 싶습니다 t
.
사각형이 주어진다 X
, Y
, Width
와 Height
.
이에 대한 알고리즘이 있습니까?
내가 사용했습니다 sin
/ cos
원하십시오. 사각형에 대한 동등한 접근 방법은 무엇입니까?
답변:
귀하의 t 가 0 에서 1 로 가정합니다 . (그렇지 않으면 배율을 적절히 곱하여 곱하십시오.)
각 변의 둘레 비율 ( 0 – 1 )을 계산하십시오. ( 가로 / 세로 )
시간 t 에서 얼마나 많은 각면이 "채워지는"지를 찾기 위해,면이 반복되어 t 가 음의 값으로 고갈 될 때까지 비율을 빼십시오 . 마지막 가장자리 ( t 가 음이되게 함)는 (측면 길이 + 나머지) / 측면 길이 의 비율로 채워집니다 . 나머지는 채워지지 않습니다.
t 의 정확한 벡터 위치를 얻으려면 각 변의 벡터에 채워진 변의 비율을 곱한 다음 더하십시오.
이것은 실제로 모든 다각형에서 작동합니다!
t의 사인 및 코사인은 각각 x 축과의 각도 (t)를 형성하는 원 위의 점의 y 및 x 좌표이다. 직사각형에는 필요하지 않습니다! 사각형은 네 줄로 구성됩니다. 경우 t
에서 이동 0
에 1
, 그것은 지점에 도달 (px,py)
에서 t==0
과에 (qx,qy)
에 t==1
에 의해 주어진 라인 :
(l(x),l(y)) = (t*qx + (1-t)*px, t*qy + (1-t)*py)
0
및 대신에 1
시간이에서 t0
로 이동하면 먼저 시간 t1
을 정규화 한 다음 위의 수식을 적용 할 수 있습니다.
(l(x),l(y)) = ( ((t-t0)/(t1-t0))*qx + ((t1-t)/(t1-t0))*px, ((t-t0)/(t1-t0))*qy + ((t1-t)/(t1-t0))*py )
이제 직사각형의 경우 if
시간 범위 중 하나를 포함하는 각 모서리에 대해 네 가지 경우로 나누고 선 이동을 적용하십시오.
사각형이 축 정렬되면 항상 x 값 또는 y 값이 일정하다는 것을 알 수 있습니다. 예를 들어, 사이의 t에 대한 0
및 a/4
(상정 및 (X, Y)은 좌측 하단이다)
(l(x),l(y)) = ((4*t/a)*(X+Width) + (1-4*t/a)*(X), Y+Height)
다음과 같습니다.
(l(x),l(y)) = (X + (1-4*t/a)*(Width), Y+Height)
이에 대한 실제 알고리즘이 있는지 모르겠지만 직접 Java를 만들었습니다.
int points = 4; // for a rectangle
double progress = 0.0; // 0.0 -> 1.0 (with 1.0 being 100%)
double pp = points * progress; // This calculation would otherwise be done multiple times
int p1 = Math.floor(pp);
int p2 = Math.ceil(pp);
while (p1 >= points) p1 -= points;
while (p2 >= points) p2 -= points;
double tmp = 2 * Math.PI / points;
int p1x = Math.cos(tmp * p1);
int p1y = Math.sin(tmp * p1);
int p2x = Math.cos(tmp * p2);
int p2y = Math.sin(tmp * p2);
double p = pp - Math.floor(pp);
int x = (1.0 - p) * p1x + p * p2x; // between -1.0 and 1.0
int y = (1.0 - p) * p2x + p * p2y; // between -1.0 and 1.0
if (p == 0.0) { // prevent a weird glitch when p = 0.0 (I think this is a glitch)
x = p1x;
y = p1y;
}
애니메이션을 원하는만큼 (곱하여), 원하는 곳 (x와 y에서 더하기 / 빼기)으로 만들려면 x
및 y
변수를 변환해야합니다 .
이 코드를 테스트하지는 않았지만 작동해야한다고 생각합니다. 이것은 여러 포인트가있는 다각형에서도 작동합니다 (다수의 코드를 사용하여 다각형을 생성 할 수도 있음).
주어진 :
a=total time
perimeter = WIDTH *2 + HEIGTH * 2;
주어진 시간 에 둘레 T1
를 얻는 방법 P
(0에서 rect 위치를 가정)?
T1=T1%a; //use mod to have T1<a
distT1 = (T1*Perimeter)/a; //distance traveled in time T1
지금은 (당신이 나를 살려 희망) 몇 가지 쉬운 차 scool의 기하학과 수학 구하는 P.x
와 P.y
에서distT1