2013-09-10 3 views
-1

Мне нужно нарисовать 2 круга, где я даю функции ничьей центральную точку каждой окружности и x, y.Расчет позиции, чтобы нарисовать круг

I первый круг статический, будет на тех же x и y. Второй круг меньше и будет следовать за положением мыши, но его центральная точка не может выйти за пределы первого круга.

Учитывая, что у меня есть эти переменные: Circle1.x, Circle1.y, Circle.radius Mouse.x, Mouse.y

Как я могу получить х и у для circle2?

Вот выбор, чтобы показать, что мне нужно: pic Black: circle1 Красный: circle2 Зеленый: Мышь

ответ

0

Вычтите центр окружности от положения курсора мыши. Это приводит к вектору (dx, dy), указывающему от центра круга к положению мыши. Длина этих векторов должна быть равна или меньше радиуса окружности. Если длина меньше радиуса круга: положение мыши находится в пределах круга и остается неизменным, если длина больше радиуса круга: нормализуйте вектор и умножьте его на радиус, добавив результирующий вектор к центру круга приведет к новой позиции.

код псевдопользователей:

dx = Mouse.x-Circle1.x 
dy = Mouse.y-Circle1.y 

length = sqrt(dx*dx+dy*dy) 

if (length > Circle.radius) 
    ratio = Circle1.radius/length 
    Circle2.x = Circle1.x + dx*ratio 
    Circle2.y = Circle1.y + dy*ratio 
else 
    Circle2.x = Mouse.x 
    Circle2.y = Mouse.y 
end 
Смежные вопросы