我在下面的代碼中有一個奇怪的錯誤。向下滾動查看圖像以參考此問題。在下面的圖片中找到的程序使用javascript在畫布中繪製,所以請注意,x和y座標都是正的,所以y座標相對於圖形是顛倒的。旋轉向量時出現錯誤,通過調整旋轉創建新向量
let rotateVectors = (vs, t) => {
return sortVectors(Object.keys(vs).map(v => {
console.log(vs[v].vector.direction);
let rateOfRotation = -.01 * (Math.random() * (5-1)+1);
let vector = vs[v].vector
let p = vector.magnitude;
let c = vector.coords;
let x = c.x*Math.cos(rateOfRotation) - c.y*Math.sin(rateOfRotation);
let y = c.x*Math.sin(rateOfRotation) + c.y*Math.cos(rateOfRotation);
return vector(cartesian2dCoordinate(x,y))
}));
}
上述方法稱爲上一個循環來緩慢地旋轉由一些隨機量矢量,地圖函數返回一個新矢量這需要的x,y座標,或二維笛卡爾對描述上升和運行的矢量。
rotateVectors返回vs對象中所有向量的排序列表(按角度排序,度數爲)。
let vectorDirection = (c) => {
//THE ZERO VECTOR
if(c.x === 0 && c.y === 0) return 0;
//cardinal directions, vertical and horizontal
else if(c.x === 0) return c.y > 0 ? .5 : 1.5;
else if(c.y === 0) return c.x > 0 ? 0:Math.PI;
//q3
else if(c.x< 0 && c.y < 0) return (1+ (Math.atan(-1*((c.y * -1)/c.x))));
//q2
else if(c.x < 0 && c.y > 0) return (Math.PI/180)*(180 + toDegrees(Math.atan((c.y * -1)/c.x)));
//q4
else if(c.y < 0 && c.x > 0) return (Math.PI/180)*(toDegrees(Math.atan((c.y * -1)/c.x)));
//q1
else return Math.atan(c.y*-1/c.x);
}
該函數根據其象限返回矢量角度的弧度。
在圖像中的一個,任何給定的矢量將從紅色標記x平面周圍旋轉,一路到-y垂直柱。 S->電子。
traversal zone 2, reversed direction
在圖像中的兩個,所述載體奇蹟般地從E平面到S平面瞬間移動,並且行進以相反的方向。 S-> E,於是矢量傳回圖像1中的-X平面「S」。
我比較新來繪製與載體的東西。我記得學校有點觸動,但我很久沒有用過它了。有沒有人有一個想法可能會發生在這裏?爲什麼我的矢量傳送,改變方向,爲什麼沒有矢量穿過圖像2的S左邊的空區域,並且從圖像1的S下降?
http://imgur.com/a/Skp5O 空區圖像。沒有向量遍歷圖的這個部分。 –
你應該使用vectorDirection中的atan2函數,而不是每個象限都有一個案例 – samgak
哇......該死的。我向上帝發誓,我昨晚嘗試了一切,但沒有發生任何事。它現在按預期工作。 –