2013-05-06 10 views
0

Я пытаюсь сделать переосмысленный сенсорный экран, который я сделал успешно. Вы можете найти код How to make view resizable on touch event.Получите новые очки от угла Android

У этого есть 4 угла. Вы можете изменить размер прямоугольника, перетащив один из углов. Но теперь я хочу улучшить эту логику и хочу поместить ротацию в этот код. Я успешно нахожу угол, когда пользователь коснется центра одного из краев прямоугольника. Но теперь проблема в том, что я не могу получить новое положение углов, чтобы я мог перерисовать этот прямоугольник, и поворот возможен.

Вопрос: Как я могу вычислить 4-х угловые новые позиции на основе угла?.

ответ

0

Если вам известен угол поворота, то вам не нужно вычислять вершины прямоугольника. простой способ сделать это было бы, как показано ниже

@Override 
     protected void onDraw(Canvas canvas) { 
      super.onDraw(canvas); 
      canvas.save(); 
      canvas.rotate(60.0f); 

      paint.setColor(Color.BLACK); 
      paint.setStyle(Paint.Style.STROKE); 

      canvas.drawRect(10, 10, 100, 100, paint); 
      canvas.restore(); 
     } 
+0

Я знаю этот сценарий, чтобы повернуть холст .. но затем после того, как очки были на их старом месте. В следующий раз я не могу найти новое место из 4-х угловых точек на холсте. Это не сработает мой друг. –

0

Как я понял, вы хотите, чтобы вычислить новые координаты на основе угла поворота ... Это, наверное, проще, чем вы думаете:

x' = x × (cosα - sinα) 
y' = y × sinα × cosα 

Таким образом, вы просто применяете это программно, учитывая, что x' - результат вращения x, то же самое для y' и y, а α - угол поворота.

cosα и sinα функции доступны в Java, как Math.cos(α) и Math.sin(α), но внимание: в Java, все тригонометрические функции используются радианы и не степеней, как угол, так что вы можете считать это: rad = deg * 180/π Применяется как:

double deg = 45d; //Put instead your degrees 
double rad = deg/180 * Math.PI; //The radians convertion 
Смежные вопросы