我想實現兩點彼此旋轉。因此我使用旋轉矩陣。不過,現在我發現點之間的距離越來越大(請參閱緩存的視頻1)。但是,我的整個模擬過程中距離應該保持不變。兩個點圍繞同一中心旋轉但距離增長
這裏是我的代碼,我使用的計算速度:
其中P1和P2是兩個點。
double xPos = p0.x+p1.x;
double yPos = p0.y+p1.y;
//The center between p1 and p2
xPos /=2;
yPos /=2;
//the rotating angle
double omega = 0.1;
//calculate the new positions
double x0new = xPos + (p0.x-xPos)*std::cos(omega) - (p0.y-yPos)*std::sin(omega);
double y0new = yPos + (p0.x-xPos)*std::sin(omega) + (p0.y-yPos)*std::cos(omega);
double x1new = xPos + (p1.x-xPos)*std::cos(omega) - (p1.y-yPos)*std::sin(omega);
double y1new = yPos + (p1.x-xPos)*std::sin(omega) + (p1.y-yPos)*std::cos(omega);
//the speed is exatly the difference as I integrate one timestep
p0.setSpeed(p0.x-x0new, p0.y-y0new);
p1.setSpeed(p1.x-x1new, p1.y-y1new);
然後,我將速度整合一次。我的計算有什麼問題?
更新 看來,我的積分是錯誤的。如果我直接設置職位,那麼他的工作很完美。但是我現在不什麼是錯的這個集成:
setSpeed(ux,uy){
ux_=ux;
uy_=uy;
}
// integrate one timestep t = 1
move(){
x = x + ux_;
y = y + uy_;
}
'setSpeed'做什麼? – Andrey
設置點的速度,然後集成一個步驟。 – tune2fs
你能修改整合期來驗證我的理論嗎? (擴大它將增加擴展) –