как нарисовать дугу для трехточечного угла в java

В java у меня есть три точки, обозначающие две линии, образующие угол. Теперь мне нужно создать угловую дугу примерно в 10 пикселях от общей точки. с указанием угла на дуге. Я могу рассчитать угол, но как нарисовать дугу и показать угол на дуге. Скажите, пожалуйста, какой-нибудь код или ссылку, где я могу найти решение для этого. Фрагмент кода приведен ниже.

public void paintComponent(Graphics g){
        Graphics2D g2=(Graphics2D)g;

        Point p1=new Point(100,100);
        Point p2=new Point(200,100);
        Point p3=new Point(100,0);

        Line2D line1=new Line2D.Double(p1, p2);
        Line2D line2=new Line2D.Double(p1, p3);
        g2.draw(line1);
        g2.draw(line2);
        double angle=getAngle(line1,line2);
        System.out.println(angle);
        //g2.drawArc(110, 100, 20, 20, 100, 30);

    }

    public double getAngle(Line2D line1,Line2D line2){

        double angle1=Math.atan2(line1.getY1()-line1.getY2(), line1.getX1()-line1.getX2());
        double angle2=Math.atan2(line2.getY1()-line2.getY2(), line2.getX1()-line2.getX2());

        return Math.toDegrees(angle1-angle2);
    }

Я не знаю, как использовать DrawArc, чтобы нарисовать точную дугу, которую я хочу, а также указать на нее угол.

С уважением.


person agarwal_achhnera    schedule 07.10.2012    source источник


Ответы (1)


Аргументы drawArc из документации:

int x, int y, ширина int, высота int, int startAngle, int arcAngle

x и y - ваша общая точка (p1), а ваша ширина и высота, вероятно, равны 10 (чтобы нарисовать круговую дугу с радиусом 10 пикселей)

Вычисленный угол - это последний аргумент (arcAngle), который измеряет развертку дуги против часовой стрелки. Итак, последняя часть, которую вам нужно решить, - это начальный угол, который, вероятно, является вашим углом 1 или 2 (0 в данном случае - положительная ось x или положение на 3 часа).

Имейте в виду, что, как написано, вы иногда будете рисовать дугу> 180 градусов, вам понадобится больше логики, если вы хотите всегда находить наименьший угол между двумя линиями.

Что касается текста, вы можете использовать drawString и вычислить x и y, используя некоторую тригонометрию с половиной вашего угла развертки и желаемым радиусом. Хотя для оптимального размещения вам может потребоваться выяснить, в каком квадранте вы рисуете, и оттуда отрегулировать.

person Superboggly    schedule 08.10.2012