Движение по произвольной кривой — КиберПедия 

Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...

Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...

Движение по произвольной кривой

2017-09-30 821
Движение по произвольной кривой 0.00 из 5.00 0 оценок
Заказать работу

Рассмотрим задачу организации движения видимого элемента по произвольной кривой, заданной выражением с одной переменной. Функция движения в качестве параметров будет иметь два выражения, которые описывают изменения вертикальной и горизонтальной координат элемента. Эти выражения будут содержать одну переменную, которую мы обозначим через х – строчной латинской буквой. Переменную х можно интерпретировать как независимый параметр движения (например, время). С помощью встроенной функции eval() можно вычислить значения этих выражений при конкретном значении переменной х и присвоить их параметрам left и top таблицы стилей перемещаемого элемента. Функция (пусть это будет move()), которая все это выполняет, передается в качестве первого параметра методу setInterval(), который периодически вызывает ее через заданный интервал времени.

Функция инициализации движения curvemove() принимает три строковых параметра (ID перемещаемого элемента, выражение для вертикальной координаты и выражение для горизонтальной координаты) и один числовой параметр (период времени, через который координаты элемента пересчитываются). Ниже приводятся определения функций curvemove() и move():

 

function curvemove(xid, уехрr, xexpr, ztime) {

/* Движение по произвольной кривой.*/

 

if (!xid) return null

if (!yexpr) yexpr = "x"

if (!xexpr) xexpr = "x"

if (!ztime) ztime = 100 // интервал времени, мс

x = 0 /* глобальная переменная, входящая в выражения уехрr и хехрr */

setInterval("move('"+xid+" ', + уехрг + " "+ xexpr +"' ztime)

}

function move(xid, yexpr, xexpr) {

x++

document.all[xid].style.top = eval(yexpr)

document.all[xid].style.left = eval(xexpr)

}

Параметры:

- хid – id движущегося объекта, строка;

- уехрr – выражение для вертикальной координаты;

- хехрr – выражение для горизонтальной координаты;

- ztime – интервал времени между вызовами функции move(), мс.

Чтобы сделать переменную х глобальной, не надо использовать ключевое слово var перед первым ее появлением в коде.

Ниже приведен пример HTML документа с движущимся изображением:

 

<НТМL>

<IMG ID = "myimg" SRC = "pict1.gif" STYLE = "position:absolute">

<SCRIPT>

function curvemove(xid, yexpr, xexpr, ztime) {

// код определения функции

}

function move(xid, yexpr, xexpr) {

// код определения функции

}

Curvemove()'myimg', "100 + 50*Math.sin(0.03*x)", "50 + х", 100)

</SCRIPT>

</HTML>

 

В этом примере изображение будет перемещаться по синусоиде с 50 пикселов и горизонтальной скоростью 10 пикселов в секунду. Начальные ординаты графического объекта равны 100 и 50 пикселов по вертикали и горизонтали соответственно.

Рисование линий

В JavaScript нет специальных встроенных средств для рисования произвольных линий. Для решения этой задачи ужно вывести на экран изображение размером 1x1 пиксел, залитое цветом, отличающимся от цвета фона. Это изображение следует разместить несколько раз в соответствии с координатами, которые задаются параметрами позиционирования top и left атрибута STYLE тега <IMG>. С помощью сценария можно сформировать строку, содержащую теги <IMG> с не­обходимыми атрибутами, а затем записать ее в документ методом write().

Рисование прямой линии

Для отображения точки в HTML можно использовать следующий тег:

 

<IMG SRC = "point.bmp" STYLE = "position:absolute; top:y; left:x">

Здесь point.bmp – имя графического файла, содержащего один пиксел; у, х – числа, указывающие положение графического файла в пикселах. Изображение точки размером 1x1 пиксел можно создать в любом графическом редакторе. Из соображений экономии его лучше всего сохранить в файле формата BMP, а не JPEG или GIF (при малых размерах изображения алгоритмы сжатия неэффективны).

Чтобы задать размеры отображения точки на экране, следует использовать атрибуты WIDTH и HEIGHT (ширина и высота):

 

<IMG SRC = "point.bmp" STYLE = "position: absolute; top:y; left:x" WIDTH=n HEIGHT=n>

 

Одинаковые значения атрибутов WIDTH и HEIGHT задают представление точки в виде квадрата размером n×n пикселов. При этом точка с исходными размерами 1x1 пиксел просто растягивается. Таким образом, имеется возможность задать отображаемые размеры (масштаб) одной точки, а, следовательно, и определить толщину линии.

Далее следует пример определения функции, которая рисует прямую линию с заданными координатами xl, yl, х2, у2 и толщиной линии n.

 

Function line(xl, yl, х2, у2, n){

/*xl, yl – начало линии, х2, у2 – конец, n – толщина */

var clinewidth = " WIDTH=" + n + "HEIGHT=" + n /* строка для учета толщины */

var xstr = "" // строка тегов для записи в HTML-документ

var xstr0 = ' <IMG SRC="point.bmp"' + clinewidth + ' STYLE = "positlon:absolute; '

var k = (y2 – yl)/(x2 – xl) // коэффициент наклона линии

var x = xl // начальное значение координаты х

/* Формирование строки, содержащей теги <IMG... >: */

while (x <= х2) {

xstr += xstr9 + 'top:' + (yl + k* (x – xl)) + ': left:1 + x + '

x+ +

// запись в документ

 

Рисование кривой линии

Функция curve() для рисования кривой принимаtn следующие параметры: имя графического файла с изображением точки (может быть любое изображение), выражение, задающее кривую, координаты начала линии, количество точек линии, толщина линии и длина штриха (если потребуется штриховая линия). Далее следует код функции curve() для рисования кривых.

 

function curve(pict_file,yexpr, x0, y0, t, n. s){

/* pict_file - имя графического файла

yexpr - выражение с переменной х

х0, у0 - координаты начала кривой

t - количество точек кривой (значений переменной х)

n - толщина линии

s - длина штриха и паузы */

if (!yexpr) return null

if (!pict_file) pict_file = "point.bmp"

if (!s) s = 0

if (!t) t = 0

var clinewidth = ''

if (!n)

clinewidth = 'WIDTH=' + n + 'HEIGHT=' + n

var x

xstrG = '<IMGSRO "' + pict_file + '"'' + clinewidth + STYLE = "position:absolute;top: '

xstr = ""

var i = 0, draw = true

for(x = 0; x < t; x++) {

if (draw)

xstr += xstr0 + (y0 + eval(yexpr)) + '; left:' + (x0 + x)

if (i > s&&s > 0) {

draw =!draw

i = 0

}

i ++

}

document.write (xstr) // запись в документ

 

Задания к лабораторной работе № 9

 

Задание 1. Создать программу на JS, позволяющую перетащить мышью область текста и картинку.

Задание 2. Создать программу на JS, организующую движение картинки по прямой линии.

Задание 3. Создать программу на JS, организующую движение картинки по кривой линии и возврат ее в исходное состояние.

Задание 4. Нарисовать график функции, выбрав функцию с помощью радио кнопки (y=x2, y=x3, y=sin(x), y=cos(x)).

Задание 5*. Реализовать выбор цвета графика функции с помощью списка.


Поделиться с друзьями:

Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьше­ния длины пробега и улучшения маневрирования ВС при...

Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...

Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...

История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.012 с.