2013-10-04 3 views
1

У меня есть математическая проблема, я создаю строку с каждой гранью, перпендикулярную линию, но я бы хотел выбрать длину этих перпендикулярных линий, но я не знаю, как это сделать :(Вращение линии в андроидном холсте

это мой код:

int vX = fleche.endPoint.x - fleche.startPoint.x; 
     int vY = fleche.endPoint.y - fleche.startPoint.y; 

     int vXP = - (fleche.endPoint.y - fleche.startPoint.y); 

     Paint p = new Paint(); 
     p.setColor(fleche.color); 
     p.setTextSize(30); 
     p.setTextAlign(Paint.Align.CENTER); 
     p.setStrokeWidth(8); 
     p.setAlpha(fleche.alpha); 

     Path path = new Path(); 

     path.moveTo(fleche.startPoint.x - 10,fleche.startPoint.y - 10); 
     path.lineTo(fleche.endPoint.x - 10, fleche.endPoint.y - 10); 
     c.drawTextOnPath(fleche.value + fleche.unit, path, 30, 0, p); 

     c.drawPath(path, p); 

     path.moveTo(fleche.startPoint.x - 10,fleche.startPoint.y - 10); 
     path.lineTo(fleche.endPoint.x - 10, fleche.endPoint.y - 10); 
     c.drawTextOnPath(fleche.value + fleche.unit, path, 30, 0, p); 

     //ligne principale 
     c.drawLine(fleche.startPoint.x, fleche.startPoint.y, fleche.endPoint.x, fleche.endPoint.y, p); 

     //left 
     c.drawLine(fleche.startPoint.x, fleche.startPoint.y, fleche.startPoint.x + vXP, fleche.startPoint.y + vX, p); 
     c.drawLine(fleche.startPoint.x, fleche.startPoint.y, fleche.startPoint.x - vXP, fleche.startPoint.y - vX, p); 

     //right 
     c.drawLine(fleche.endPoint.x, fleche.endPoint.y, fleche.endPoint.x + vXP, fleche.endPoint.y + vX, p); 
     c.drawLine(fleche.endPoint.x, fleche.endPoint.y, fleche.endPoint.x - vXP, fleche.endPoint.y - vX, p); 
     //Tools.logDebug("Fleche créée(" + i + "/" + (arrows.size()-1) + ") :" + fleche.toString()); 

заранее спасибо всем: D

ответ

0

Это, как вы можете масштабировать dx и dy по длине L:

float ratio = L/Math.sqrt(dx * dx + dy * dy); 
dx *= ratio; 
dy *= ratio; 

редактировать после комментария:

//left 
final float L = 20.0f; // for instance 
final float ratio = L/Math.sqrt(vXP * vXP + vX * vX); 
final float dx = vXP * ratio; 
final float dy = vX * ratio; 
c.drawLine(fleche.startPoint.x, fleche.startPoint.y, fleche.startPoint.x + dx, fleche.startPoint.y + dy, p); 
c.drawLine(fleche.startPoint.x, fleche.startPoint.y, fleche.startPoint.x - dx, fleche.startPoint.y - dy, p); 
+0

Спасибо большого, но что представляет ое и д ?? –

+0

Я отредактировал свой ответ –

+0

Спасибо большое! это просто отлично! : D –

Смежные вопросы