Консультация № 109516
15.11.2007, 10:39
0.00 руб.
0 1 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 ???
а дальше я не знаю как быть. Может быть ход мыслей вообще не верен.

Обсуждение

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

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

нарисуем чертеж: экран(прямоугольник SW x SH), окружность, радиус(рассмотрим частный случай, 0<a<45, т.е. направление радиуса от центра вправо-вниз) и касательную (должна быть перпендикулярна радиусу), так, чтобы она пересекала границы эрана в точках (Xl1,0) и (Xl2,SH), таким образом сразу Yl1=0, а Yl2=SH.
Теперь проведем вертикальную линию, проходящую ч/з точку(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, но вроде как синтаксис такой же.
Успехов.

Приложение:
SCREEN 12‘размеры экранаSW = 640SH = 480‘центрXc = 640 / 2Yc = 480 / 2‘радиусR = 60‘SIN,COS и TAN требуют угол в радианах‘число ПИPI = 4 * Atn(1)For a = 0 To 360 Cls ‘если не очищать экран, получится красивая картинка Circle (Xc, Yc), R X = 60 * Cos(a * PI / 180) + Xc Y = 60 * Sin(a * PI / 180) + Yc If a = 90 Or a = 270 Then ‘частный случай Xl1 = 0 Yl1 = Y Xl2 = SW Yl2 = Y Else Xl1 = X + Y*Tan(a * PI / 180) Yl1 = 0 Xl2 = X - (SH - Y)*Tan(a * PI / 180) Yl2 = SH End If Line (Xl1, Yl1)-(Xl2, Yl2)Next a
Форма ответа