Лидеры

ID: 259041

Алексеев Владимир Николаевич

Мастер-Эксперт


ID: 226425

Konstantin Shvetski

Модератор


ID: 401284

Михаил Александров

Советник


ID: 137394

Megaloman

Мастер-Эксперт


ID: 400669

epimkin

Профессионал


ID: 401888

puporev

Профессор


ID: 405239

al4293189

4-й класс


8.13.11

14.01.2022

JS: 2.13.38
CSS: 4.8.5
jQuery: 3.6.0
DataForLocalStorage: 2022-01-24 11:16:01-standard


Консультация онлайн # 109516

Раздел: Basic
Автор вопроса: Марсель
Дата: 15.11.2007, 10:39 Консультация закрыта
Поступило ответов: 1
Помогите с решением задачи в среде Qbasic.
Условие:
Изобразить на экране движение прямой, которая в каждый момент касается окружности заданного радиуса, центр которой совпадает с центром экрана. Точка касания перемещается по окружности с постоянной скоростью.

Я предпологаю, что координаты по x будут заданы функцией косинуса, вот так x=r*cosa, где r-радиус окружности, а a-угол вращения (0-360). По у соответсвенно задаются x=r*sina.
Тогда:
screen 12
circle (320.240), 60
for a=0 to 360
x=60*cos(a)
y=60*sin(a)
line ???
а дальше я не знаю как быть. Может быть ход мыслей вообще не верен.

Ответ # 1, HookEst (Посетитель)

Здравствуйте, Марсель !
Все правильно, после построения, сразу видно как действовать дальше, не углубляясь в аналитическую геометрию.
Допустим:
SW и SH -ширина и высота экрана;
Xc,Yc и R - координаты центра и радиус окружности
X,Y - координаты точки касания, точка K
a-угол между радиусом и осью x, в градусах

нужно найти
Xl1,Yl1 - координаты первой точки прямой L1
Xl2,Yl2 - координаты второй точки прямой L2

нарисуем чертеж: экран(прямоугольник SW x SH), окружность, радиус(рассмотрим частный случай, 0 Теперь проведем вертикальную линию, проходящую ч/з точку(X,Y), она пересекает границы экрана в точках M(X,0) и N(X,SH).
Из треугольника KML1 видно, что Xl1 отличается от X на длину стороны ML1, а так как угол MKL1=a(взаимно перпендикулярные стороны), то длина ML1=KM*TAN(a) или Xl1=X+Y*TAN(a).
Аналогично, из треугольника KML2, следует, что Xl2=X-(SH-Y)*TAN(a).
Если не обязательно, чтобы точки L1 и L2 не выходили за пределы экрана, то на этом можно закончить, единствено нужно предусмотрить случаи a=90 и a=270, для которых TAN(a)-не существует. QBasica под рукой не оказалось, тестировал в VB6, но вроде как синтаксис такой же.
Успехов.

Приложение:


HookEst

Посетитель
15.11.2007, 13:12
Нет оценки ответа

Мини-форум консультации # 109516


Нет сообщений в мини-форуме
Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.