Вывод спирали на экран в DOS Теория Архимедова спираль — спираль, плоская кривая, траектория точки [math]M[/math], которая равномерно движется вдоль луча [math]OV[/math] с началом в [math]O[/math], в то время как сам луч [math]OV[/math] равномерно вращается вокруг [math]O[/math]. Другими словами, расстояние [math]\rho=OM[/math] пропорционально углу поворота [math]\varphi[/math] луча [math]OV[/math]. Повороту луча [math]OV[/math] на один и тот же угол [math]\varphi[/math] соответствует одно и то же приращение [math]\rho[/math]. Уравнение Архимедовой спирали в полярной системе координат записывается так: [math]\rho=k\cdot \varphi[/math] где [math]k[/math] — смещение точки [math]M[/math] по лучу [math]r[/math], при повороте на угол равный одному радиану. Повороту прямой на [math]2\cdot\pi[/math] соответствует смещение [math]a=|BM|=|MA|=2\cdot k\cdot\pi[/math]. Число [math]a[/math] — называется шагом спирали. Уравнение Архимедовой спирали можно переписать так: [math]\rho=\frac{a}{2\cdot \pi}\cdot\varphi[/math] (1) При вращении луча против часовой стрелки получается правая спираль, при вращении — по часовой стрелке — левая спираль. Обе ветви спирали (правая и левая) описываются одним уравнением (1). Положительным значениям [math]\varphi[/math] соответствует правая спираль, отрицательным — левая спираль. Если точка [math]M[/math] будет двигаться по прямой [math]UV[/math] из отрицательных значений через центр вращения [math]O[/math] и далее в положительные значения, вдоль прямой [math]UV[/math], то точка [math]M[/math] опишет обе ветви спирали. Луч [math]OV[/math], проведенный из начальной точки [math]O[/math], пересекает спираль бесконечное число раз — точки [math]B[/math], [math]M[/math], [math]A[/math] и так далее. Расстояния между точками [math]B[/math] и [math]M[/math], [math]M[/math] и [math]A[/math] равны шагу спирали [math]a=2\cdot k\cdot\pi[/math]. При раскручивании спирали, расстояние от точки [math]O[/math] до точки [math]M[/math] стремится к бесконечности, при этом шаг спирали остается постоянным (конечным), то есть, чем дальше от центра, тем ближе витки спирали, по форме, приближаются к окружности. Практика Две пересекающиеся спирали. [math]X[/math] и [math]Y[/math] рассчитываются по формулам: [math]X=\alpha\cdot a\cdot Cos(\alpha)[/math] [math]Y=\alpha\cdot a\cdot Sin(\alpha)[/math] Код (ASM): ; masm dos exe # .model small .data delta dd 0.001 ;величина изменения divK dd 5.0 ;расстояние между дугами xr dw 0 ;координаты выводимой точки yr dw 0 .code .486 start:mov ax,@data mov ds,ax mov cx,0C470h ;количество итераций цикла mov ax,12h ;инициализация графического режима 640х480х16 цветов int 10h ;------------------------------------------------------------------ finit ;инициализация сопроцессора fldz mov ah,0Ch; функция 10h прерывания - установить точку xor bx,bx l1: fld st fld st fsincos fmul divK fmul st,st(2) fistp word ptr xr ;заносим X в переменную для вывода на экран fmul divK fmul fistp word ptr yr ;заносим Y в переменную для вывода на экран push cx mov cx,xr mov dx,yr add dx,240; 240 - половина высоты экрана в этом режиме add cx,320; 320 - половина ширины экрана в этом режиме mov al,0A3h; цвет правой спирали int 10h ;выводим точку заданным цветом sub dx,yr sub dx,yr mov al,0A4h; цвет левой спирали int 10h ;выводим точку заданным цветом pop cx fadd delta;вычисляем новое значение alpha loop l1 ;цикл по cx ;-------------------------------------------------------------------- mov ah,0 ;ожидание нажатия клавиши int 16h mov ax,3 ;перевод обратно в TextMode int 10h mov ah,4Ch ;стандартный выход int 21h end start