Detectando o cursor sobre a borda externa de um círculo Path2D no JPanel [duplicado]

Esta pergunta já tem uma resposta aqui:

Detecção de colisão com formas complexas 1 resposta

Então, eu tenho um programa que desenha círculos Path2D no JPanel. O que estou tentando fazer é redimensionar o círculo quando o usuário clica e arrasta a parte inferior direita do círculo. Então, o que eu quero é detectar quando eles estão noborda externa inferior direita do círculo, não a parte inferior direita dos limites ao redor do círculo. Basicamente, preciso descobrir como fazer algo assim:

Eu sei como fazer isso com retângulos usando getBounds (), mas quando você usa getBounds () em um círculo, ele retornará o quadrado ao redor do círculo e não os limites do círculo real. Alguma idéia de como eu posso fazer isso funcionar? Obrigado!

Aqui está uma versão abreviada e executável do meu programa:

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Panel;
import java.awt.Rectangle;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Path2D;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class Editor {

    public static void main(String[] args) {

        JFrame frame = new UMLWindow();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setBounds(30, 30, 1000, 700);
        frame.getContentPane().setBackground(Color.white);
        frame.setVisible(true);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }
}

class UMLWindow extends JFrame {
    Shapes shapeList = new Shapes();
    Panel panel;

    private static final long serialVersionUID = 1L;

    public UMLWindow() {
        addMenus();
        panel = new Panel();
    }

    public void addMenus() {

        getContentPane().add(shapeList);

        setSize(300, 200);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        shapeList.addCircle(100, 100);
    }
}

// Shapes class, used to draw the shapes on the panel
// as well as implements the MouseListener for dragging
class Shapes extends JPanel {
    private static final long serialVersionUID = 1L;

    private List<Path2D> shapes = new ArrayList<Path2D>();
    int currentIndex;

    public Shapes() {
        MyMouseAdapter myMouseAdapter = new MyMouseAdapter();
        addMouseListener(myMouseAdapter);
        addMouseMotionListener(myMouseAdapter);
    }

    public void addCircle(int width, int height) {
        Path2D circ = new Path2D.Double();
        circ.append(new Ellipse2D.Double(442, 269, width, height), true);
        shapes.add(circ);
        repaint();
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);

        Graphics2D g2 = (Graphics2D) g;
        g2.setStroke(new BasicStroke(2));
        for (Path2D shape : shapes) {
            g2.draw(shape);
        }
    }

    class MyMouseAdapter extends MouseAdapter {

        @Override
        public void mousePressed(MouseEvent e) {

        }

        @Override
        public void mouseDragged(MouseEvent e) {
        }

        @Override
        public void mouseReleased(MouseEvent e) {
        }
    }
}

questionAnswers(2)

yourAnswerToTheQuestion