![]() |
ПОМОГИТЕ СДЕЛАТЬ ПРОГРАММУ,PLEASE
:help: :idontnow:
Задача: Изобразить движущуюся прямую,которая в каждый момент времени касается окружности,центр которой совпадает с центром экрана.Точка касания пересекается по окружности с постоянной угловой скоростью. Сама окружность невидима.Радиус окружности вводит с клавиатуры пользователь. На Borland C++ |
Цитата:
Цитата:
Технически - зная координаты концов прямой, стираем прямую (либо стираем весь экран, либо закрашиваем прямую цветом фона) и рисуем смещенную и т.д. Сама математика простая: в цикле по углу angle от 0 до 359 с помощью sin и cos вычисляем координаты точки окружности x = R*cos(angle); y = R*sin(angle) и учитываем смещение центра окружности - прибавляем к полученным координатам. |
Цитата:
|
тута все можно еще проще сделать через матрицу поворота и смещения. Прямая строится по двум точкам с двумя координатами. Вот тебе статейка на эту тему:
_ttp://algolist.manual.ru/graphics/3dfaq/articles/23.php |
Цитата:
Одна точка прямой - точка касания. Вторая - это точка, отведённая от точки касания на какое-нибудь расстояние в сторону, равную текущему углу + 90 градусов. На паскале я бы написал такую программу за 15 минут. А вот на C++ пишу к сожалению редко. |
На С++ программить не умею посему предложу алгоритм ...
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 соответственно Истина где-то рядом ;) |
Только не забыть обрезать прямую по краям экрана.
В принципе, если радиус будет больше чем половина диагонали - прямой будет не видно. |
| Часовой пояс GMT +4, время: 18:34. |
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.