2014-06-24 85 views
0

我在畫布上畫一個三角形:如何圍繞中心旋轉三角形?

float x = 540; 
float y = 960; 
Path path = new Path(); 
path.moveTo(x, y); 
path.lineTo(x+18, y+60); 
path.lineTo(x-18, y+60); 
path.lineTo(x, y); 
canvas.drawPath(path, mPaint); 

這畫布有另一個對象。但是我只需要繞着這個三角形的中心以隨機角度(0到360之間)旋轉這個三角形。如何實現它?旋轉後如何獲得三角形的座標頂點?

+1

那麼這是一個編程或數學問題?我說第二個,所以這裏有一個提示:谷歌的「旋轉矩陣」。 – Thomas

+0

屬於http://math.stackexchange.com/(該選項不存在於「此問題屬於Stack Exchange網絡中的其他站點」) – Budius

回答

2

及其簡單的數學,如果三角形的中心爲(x,y)和所述中心頂點distace是A,三個頂點將是

- (A * Math.cos(角),A * Math.sin(angle))

- (A * Math.cos(angle + 2 * Math.PI/3),A * Math.sin(angle + 2 * Math.PI/3))

- (A * Math.cos(角度-2 * Math.PI/3),A * Math.sin(角度-2 * Math.PI/3))

+0

您的意思是? \t x1 =(float)(x1-l1 * Math.cos(angle)); \t \t \t \t \t \t \t \t \t Y1 =(浮子)(Y1-L1 * Math.sin(角度)); \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t X2 =(浮子)(X2-L2 * Math.cos(角度+ 2 * Math.PI/3)); \t \t \t \t \t \t \t \t \t Y2 =(浮子)(Y2-L2 * Math.sin(角度+ 2 * Math.PI/3)); \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t X3 =(浮子)(X3-L3 * Math.cos(角度-2 * Math.PI/3)); \t \t \t \t \t \t \t \t \t Y3 =(浮子)(Y3-L3 * Math.sin(角度-2 * Math.PI/3)); 如果是,那是行不通的。 – BArtWell

0

我通過這種方式解決它:

float angle = (float) Math.toRadians(90); // Angle to rotate 

// Size of triangle 
final float height = 60; 
final float width = 36; 

// Display coordinates where triangle will be drawn 
float centerX = 540; 
float centerY = 960; 

// Vertex's coordinates before rotating 
float x1 = centerX; 
float y1 = centerY - height/2; 
float x2 = centerX + width/2; 
float y2 = centerY + height/2; 
float x3 = centerX - width/2; 
float y3 = y2; 

// Rotating 
float x1r = (float) ((x1 - centerX) * Math.cos(angle) - (y1 - centerY) * Math.sin(angle) + centerX); 
float y1r = (float) ((x1 - centerX) * Math.sin(angle) + (y1 - centerY) * Math.cos(angle) + centerY); 

float x2r = (float) ((x2 - centerX) * Math.cos(angle) - (y2 - centerY) * Math.sin(angle) + centerX); 
float y2r = (float) ((x2 - centerX) * Math.sin(angle) + (y2 - centerY) * Math.cos(angle) + centerY); 

float x3r = (float) ((x3 - centerX) * Math.cos(angle) - (y3 - centerY) * Math.sin(angle) + centerX); 
float y3r = (float) ((x3 - centerX) * Math.sin(angle) + (y3 - centerY) * Math.cos(angle) + centerY); 

// Drawing 
Path path = new Path(); 
path.moveTo(x1r, y1r); 
path.lineTo(x2r, y2r); 
path.lineTo(x3r, y3r); 
path.lineTo(x1r, y1r); 
canvas.drawPath(path, mPaint); 

感謝Gimka和Nofate的幫助。