Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Пусть заданы координаты конечных точек отрезка прямой. Найдем координаты точки внутри отрезка (рис. 3.1).
В зависимости от угла наклона прямой выполняется цикл по оси х или по у
(рис. 3.2).
Приведем пример записи этого алгоритма на компьютерном языке программирования С, C++. Для сокращения текста рассмотрим фрагмент программы, где выполняется цикл по оси х, причем х1 <х2:
Здесь все операции выполняются над целыми числами. Двойные скобки необходимы для того, чтобы деление выполнялось после умножения. Недостатки такой программы — в цикле выполняется много лишних операций, присутствуют операции деления и умножения. Это обуславливает малую скорость работы. Относительно лишних операций в цикле. Можно вынести вычисление (у2 - у 1)/(х2 – х1) из цикла, поскольку это значение не изменяется. Однако для этого уже необходимо использовать операции с плавающей точкой:
Поскольку мы решили использовать операции с плавающей точкой, то попробуем еще уменьшить количество операций в цикле. Если раскрыть скобки в выражении у = у1 + (х – х1)-к; то получим у = у1 + х.к- х1.к. Здесь значение (yl – х1.к) является константой— эти операции также вынесем из тела цикла.
В цикле выполняются только две арифметические операции и преобразование х из целого в форму с плавающей точкой.
Если рассматривать цикл вычисления у, по соответствующим значениям хi = х1, х1 +1,..., х2 как итеративный процесс, то можно поставить такой вопрос: чему равна разность (уi+1 — уi)1 Она равна уi+1 —уi = xl + (хi+1—xl)k-xl- (xi – х1) к = (хi+1 – xi) к = к; поскольку xi+1 – xi =1. Разность (yi+1 – уi) — константа, равная к. Исходя из этого, можно построить цикл таким образом:
В теле цикла есть только одна операция для вычисления координаты у (если не учитывать <= и ++).
Если сравнивать последний вариант с предыдущим, то последний лучше по быстродействию. Также существенно отличаются способы вычисления координаты у. В последнем варианте значение у вычисляется прибавлением приращения к на каждом шаге, и на последнем шаге цикла (когда х=х2) должно стать у=у2. Исходя из чисто математических соображений здесь все корректно, однако необходимо учесть, что в компьютере дробные числа представляются в формате с плавающей точкой не точно. Кроме погрешности представления чисел существует ошибка выполнения арифметических операций с плавающей точкой. Ошибка зависит от разрядности мантисс, и самая малая — для long double, но все равно не нулевая. С каждым шагом цикла ошибки накапливаются, и может так произойти, что у не равно у2 на последнем шаге. Это необходимо учитывать при использовании алгоритма.
Положительные черты прямого вычисления координат:
1. Простота, ясность построения алгоритма.
2. Возможность работы с нецелыми значениями координат отрезка.
Недостатки:
1. Использование операций с плавающей точкой или целочисленных операций умножения и деления обуславливает малую скорость. Однако это зависит от процессора и для различных типов компьютеров может быть по-разному. В современных компьютерах, в которых процессоры используют эффективные способы ускорения (например, конвейер арифметических операций с плавающей точкой), время выполнения целочисленных операций уже не намного меньше. Для старых компьютеров разница могла быть в десятки раз, поэтому и старались разрабатывать алгоритмы только на основе целочисленных операций.
2. При вычислении координат путем добавления приращений может накапливаться ошибка вычислений координат.
Последнюю разновидность прямого вычисления координат, рассмотренную здесь, можно было бы назвать "инкрементной". Но такое название получили алгоритмы другого типа.
Дата публикования: 2015-09-17; Прочитано: 1063 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!