Я создаю путь Path2D (желтая линия). С моей программой я создаю путь шаг за шагом. Каждую секунду я добавляю новую точку к траектории и с помощью левой и правой клавиши могу перемещать траекторию влево или вправо. С AffineTransform я поворачиваю траекторию в зависимости от градусов, а с API Piccolo2D я поворачиваю панель, что оранжевая стрелка всегда находится в середине экрана и указывает на север.
Теперь я хочу нарисовать в зависимости от исходного пути определенное количество путей, которые показаны справа (и позже также слева) к исходному пути с заданным смещением, например, 20 пикселей. Смещение должно быть одинаковым для всех точек. Например, в каждой точке по 20 пикселей.
Проблема сейчас в том, что если я еду налево, то все в порядке, потому что я проезжаю по внешней кривой. Если я еду направо (внутренняя кривая), я получаю самопересечение пути. Я хочу, чтобы пути смещения были аналогичны исходному пути.
Я не уверен, как решить эту проблему. Я хочу иметь путь без самопересечения.
Кто-нибудь знает, как я могу решить эту проблему?
Код метода moveTo:
`publi c stati c GeoPosition movePoint (GeoPosition _gp, двойное расстояние в метрах, двойной подшипник) {
GeoPosition gp = _gp;
try
{
double latitude = _gp.getLatitude();
double longitude = _gp.getLongitude();
double brngRad = Math.toRadians(bearing);
double latRad = Math.toRadians(latitude);
double lonRad = Math.toRadians(longitude);
int earthRadiusInMetres = 6371000;
double distFrac = distanceInMetres / earthRadiusInMetres;
double latitudeResult = Math.asin(Math.sin(latRad) * Math.cos(distFrac) + Math.cos(latRad) * Math.sin(distFrac) * Math.cos(brngRad));
double a = Math.atan2(Math.sin(brngRad) * Math.sin(distFrac) * Math.cos(latRad), Math.cos(distFrac) - Math.sin(latRad) * Math.sin(latitudeResult));
double longitudeResult = (lonRad + a + 3 * Math.PI) % (2 * Math.PI) - Math.PI;
gp = new GeoPosition(Math.toDegrees(latitudeResult),Math.toDegrees(longitudeResult));
}
catch(Exception e)
{
}
return gp;
}
`
Спасибо.