| imho.ws |
![]() |
|
|
|
# 1 |
|
Guest
Сообщения: n/a
|
Задача: Изобразить движущуюся прямую,которая в каждый момент времени касается окружности,центр которой совпадает с центром экрана.Точка касания пересекается по окружности с постоянной угловой скоростью. Сама окружность невидима.Радиус окружности вводит с клавиатуры пользователь. На Borland C++ |
|
|
# 2 | ||
|
Junior Member
Регистрация: 16.07.2002
Сообщения: 113
![]() |
Цитата:
Цитата:
Технически - зная координаты концов прямой, стираем прямую (либо стираем весь экран, либо закрашиваем прямую цветом фона) и рисуем смещенную и т.д. Сама математика простая: в цикле по углу angle от 0 до 359 с помощью sin и cos вычисляем координаты точки окружности x = R*cos(angle); y = R*sin(angle) и учитываем смещение центра окружности - прибавляем к полученным координатам. |
||
|
|
|
|
# 4 |
|
Advanced Member
Регистрация: 09.03.2004
Адрес: толстозадая Москва
Сообщения: 498
![]() ![]() ![]() ![]() |
тута все можно еще проще сделать через матрицу поворота и смещения. Прямая строится по двум точкам с двумя координатами. Вот тебе статейка на эту тему:
_ttp://algolist.manual.ru/graphics/3dfaq/articles/23.php |
|
|
|
|
# 5 | |
|
Member
Регистрация: 12.11.2004
Сообщения: 205
![]() ![]() |
Цитата:
Одна точка прямой - точка касания. Вторая - это точка, отведённая от точки касания на какое-нибудь расстояние в сторону, равную текущему углу + 90 градусов. На паскале я бы написал такую программу за 15 минут. А вот на C++ пишу к сожалению редко. |
|
|
|
|
|
# 6 |
|
::VIP::
Отыпный Саводод Регистрация: 27.10.2002
Адрес: Краснодар, Россия
Пол: Male
Сообщения: 452
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
На С++ программить не умею посему предложу алгоритм ...
1. Узнаем размеры экрана 2. Вычисляем координаты центра окружности (X0,Y0) 4. Рисуем окружность X^2+Y^2=R^2, т.е. X в цикле от -R до +R с шагом чем меньше, тем лучше рисуем две точки с Y=+корню(R^2-X^2) и Y=-корню(R^2-X^2) 5. Затем RR(угол) в цикле от 0 до 360 градусов делаем ... - Получаем точку с X, полученным из уравнения R^2=X^2+2*R^2*(1-cos RR), и Y, полученным из уравнения X^2+Y^2=R^2 - уравнение касательной в этой точке будет иметь вид Y=(-A/B)X+(B+A^2/B), где А,В - абсцисса и ордината, полученные на предыдущем этапе (координаты точки касания) - Рисуем касательную ![]() P.S. На каждом шаге необходдимо корректировать абциссу и ординату на X0 и Y0 соответственно Истина где-то рядом
__________________
The Information will be FREE! |
|
|