Я портирую некоторый код на 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-бета-альфа), а оригинальная версия дала очень забавные результаты!
(Ух ты! Этот механизм форматирования - другая сторона странного!)