假设我有两个10米半径的圆圈,我想在每个较大的圆上朝向z轴放置5个1米半径的圆圈。 我希望大圆圈和小圆圈随意移动。大圆圈应该能够碰撞,小圆圈应该能够碰撞。
实现这一目标的最佳方法是什么?我碰巧使用Java,但算法/伪代码没问题。
更具体地说;如何有效地将较大圆圈的加速度和旋转运动转移到较小的圆圈,同时允许所有圆圈动态移动。我已经看到的解决方案往往会大量笨拙,特别是当我开始考虑比大圆圈更复杂的对象时,但这可能就是这样。
答案 0 :(得分:0)
听起来你只需要做一些数学运算。
假设我们有一个以“x1,y1”为中心的“船”(半径为r1)。 “水手”位于x2,y2,半径为r2,使得x2 y2位于船的边界内。如果船只旋转一个角度A,水手只是与这个旋转框架共同移动,那么水手的新中心位置就会旋转相同的角度。
a1 = x2 - x1; //difference between centers, x direction
b1 = y2 - y1; //in y direction
a2 = a1*cos(A) + b1*sin(A); //new difference in x direction
b2 = b1*cos(A) - a1*sin(A); //new difference in y direction
x3 = x1 + a2; //new center position of sailor, x direction
y3 = y1 + b2; // y direction
如果圆圈(水手)有一些方向,那么它也必须按A旋转 - 想想水手上的方向与船上的径向矢量对齐。在新的位置,在船旋转了一定角度A后,这个方向也旋转了A,所以我们也应该将这个旋转应用到水手身上。如果水手只是一个没有特色的圆圈,那么所有方向都是相同的,我们可以跳过它。