Как рассчитать параметры arcTo в пути Android - PullRequest
4 голосов
/ 29 июня 2011

Я портирую некоторый код на Android из Visual C ++. Функция VC ++ ArcTo принимает ограничивающий прямоугольник и начальную и конечную точки в качестве параметров для определения дуги. Функция android.graphics.Path arcTo принимает в качестве параметров ограничивающий прямоугольник, а также «начальный угол» и «угол развертки».

Мне не ясно, как преобразовать набор координат VC в набор Android или каковы эти два угла. У дуги также есть направление (CW или ACW) - мне не ясно, как включить их в один путь или как переключаться между ними.

Одна странность, с которой я столкнулся, заключается в том, что в функции Android углы выражаются в градусах, а не в радианах, что используется в большинстве вычислений и чего можно ожидать.

Я надеюсь, что мой вопрос имеет какой-то смысл и что кто-то может помочь!

Редактировать: следуя помощи, которую я получил от доктора Дределя, и с большим количеством рисования диаграмм, вот как я в итоге перевел VC ++ вызов на Android:

else if (coord.isArc())  
{  
    ptCentre = getPoint(new Coord(coord.getArcLat(), coord.getArcLong()));  
    nRadius = getPixels(coord.getArcRadius());  
    rect = new RectF(ptCentre.x - nRadius, ptCentre.y - nRadius,  
                     ptCentre.x + nRadius, ptCentre.y + nRadius);  
    if (coord.isClockwise())  
    {  
        alpha = Math.atan2(ptCentre.y - ptStart.y, ptCentre.x - ptStart.x) *  
                           Constants.k_d180Pi;  
        beta = Math.atan2(ptCentre.y - ptEnd.y, ptEnd.x - ptCentre.x) *  
                           Constants.k_d180Pi;  
        path.arcTo(rect, (float)(alpha + 180), (float)(180 - beta - alpha));  
    }  
    else  
    {  
    }

Как видите, я еще не сделал дуги против часовой стрелки, но она должна быть похожей. Мои расчеты не были идеальными, поскольку у меня изначально было (360-бета-альфа) вместо (180-бета-альфа), а оригинальная версия дала очень забавные результаты!
(Ух ты! Этот механизм форматирования - другая сторона странного!)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...