我正在研究一個用於畫布的庫,我無法弄清楚我應該如何圍繞對象的中心進行旋轉。下面是我用來渲染它們的函數以及我給它的一個示例對象。自定義旋轉算法需要可擴展性
我覺得有一個更好的方法來做4 if
陳述,但我無法弄清楚它的數學。目前,我正在拍攝物體的每個「像素」並圍繞中心旋轉,但我無法看到擴展空間。我究竟做錯了什麼?
//Rendering function
Display.prototype.renderObject = function(object, direction) {
if (typeof object.rotation !== 'number') object.rotation = 0;
for (x=0;x<object.bounds.x;x++) {
for (y=0;y<object.bounds.y;y++) {
rotation = 45;
if (x==0 && y==0) rotation += 0;
if (x==0 && y==1) rotation += 90;
if (x==1 && y==0) rotation += 270;
if (x==1 && y==1) rotation += 180;
display.drawRect(object.color[x][y],
(display.width/2) - (players[playerIndex].position.x * 16) + (object.position.x * 16) - (object.bounds.x * object.scale)/4 - (object.bounds.x/3 * object.scale * Math.cos((object.rotation+rotation)*(Math.PI/180))),
(display.height/2) + (players[playerIndex].position.y * 16) - (object.position.y * 16) - (object.bounds.y * object.scale)/4 - (object.bounds.y/3 * object.scale * Math.sin((object.rotation+rotation)*(Math.PI/180))),
object.scale, object.scale, object.rotation * (direction || 1));
}
}
};
// Example object
block = {
"color": [
["#FFF","#CCC"], // Some colors to make
["#999","#666"] // a shaded illusion
],
"position": {
"x": 0,
"y": 0
},
"bounds": {
"x": 2, // color[0].length
"y": 2 // color.length
},
"rotation": 0, // 0 to 360
"scale": 4 // real pixels per object pixel
}
// Example usage
Display.renderObject(block);
- 編輯 -
也許我需要把它計算每個像素的中心座標會是這樣,那麼獲取對象的原點和旋轉每個像素將是來自距離抵消在。
如果x = 0
和y = 0
,那麼它的+45
度罪和-45
度COS +45
度罪。如果(object.bounds.x-1)/2
爲我們提供了用於處理x的中心座標系,那麼Math.sqrt(Math.pow(x,2)+Math.pow(y,2))
給出了從對象中心開始的顏色塊的半徑。我不確定該從哪裏出發。