Хотел, чтобы объект подпрыгивал внутри круга, в итоге заставляя объект двигаться вдоль края круга
Вот этот код:
public void calculate() {
// Center of circle is at (250, 250).
//THIS ALGORITHM IS NOW PROVEN TO BE WORSE THAN I FEARED...
/* What it does:
* Moves object around in a circle.
* Does not move the object towards the center.
* Object always stays on the rim of the circle.
*
* Algorithm I used. (DOES NOT WORK):
* N is normalized vector.
* R = -2*(V dot N)*N + V
*/
vx += Accelero.X * 0.1;
vy += Accelero.Y * 0.1;
double nx = x - 250;
double ny = y - 250;
double nd = Math.hypot(nx, ny);
if (nd == 0)
nd = 1;
nx /= nd;
ny /= nd;
double dotProduct = vx * nx + vy * ny;
vx += (float) (-2 * dotProduct * nx);
vy += (float) (-2 * dotProduct * ny);
x -= vx * 2;
y -= vy * 2;
vx *= 0.99;
vy *= 0.99;
}
И это то, что происходит.
Черная линия, которую вы видите, - это место, куда перемещается фиолетовый объект (коробка). Так уж получилось, что он находится прямо на линии круга, с которой я нарисовалCanvas.drawCircle()
.
Я не понимаю, почему рефлексия не работает. Если объект должен ударить по круглой стене, не должен ли он отражать направление скорости объекта, каким должен быть алгоритм? Или я использовал неправильный алгоритм?
Любая помощь приветствуется. Заранее спасибо.