2015-02-10 2 views
0

Это не вопрос, связанный с одним языком программирования, а скорее математически концептуальный, хотя на всякий случай я использую C++ в Visual Studio.Maths Concept: рисовать линию, чтобы следовать за мышью, с ограничением радиуса

В основном, мой текущий код рисует линию, которая начинается в центре (окна), и заканчивается в моей позиции мыши в любое время, каждый кадр - я получаю линию, которая следует за моей мышью, начиная с центр.

Вопрос в том, как бы я оказался в той же системе, за исключением того, что независимо от того, как далеко моя мышь идет от центра, линия по-прежнему будет следовать направлению вектора «centerToMouse», но его длина будет всегда будет 100 единиц (как только расстояние между MousePos и ​​центром превысит 100), так что я заканчиваю строкой, которая следует (расширяет/сокращает) мою мышь, но как только я достигаю более 100 единиц от центра, линия остается 100 единиц в длину, пока моя мышь находится на расстоянии более 100 метров.

Прошу прощения, если вопрос плохо сформулирован, в моей голове это имеет смысл, и я не знаю, как еще это словом.

Мне не обязательно нужен код для C++, просто концепция. Я пробовал несколько методов, связанных с нормализацией, единичными векторами и т. Д. Но я просто застрял.

Большое спасибо за то, что нашли время!

+1

Я не проверял, но я думаю, что вы хотите 'радиус = 100; angle = atan2 (mouse_position.y-center.y, mouse_position.x-center.x); line_position = (расстояние (в центре, mouse_position) <радиус)? mouse_position: center + Vector (радиус * cos (угол), радиус * sin (угол)) ' – Kevin

+0

Он работает! Спасибо огромное! Отличная скорость и точность (да, вы были на месте!) – user2895102

ответ

1

Перефразируя из моего выше комментарий:

radius = 100; 
angle = atan2(mouse_position.y-center.y, mouse_position.x-center.x); 
if (distance(center, mouse_position) < radius){ 
    line_position = mouse_position; 
} 
else{ 
    line_position = center + Vector(radius*cos(angle), radius*sin(angle)); 
} 
Смежные вопросы