Смещение Java Path2D - PullRequest
       80

Смещение Java Path2D

0 голосов
/ 02 мая 2020

issuecodingexpected result

Я создаю путь 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;
}

`

Спасибо.

...