|
|||||||
| Ф/\Ей|\/| Ну сами понимаете... должно быть место, которое не модерируется... Но не злоупотребляйте... |
|
|
Опции темы | Опции просмотра |
|
|
#17 | ||
|
Отличник форума
![]() Регистрация: 10.10.2005
Сообщений: 605
|
Цитата:
.А структуру данных + методы ее обработки оптимизировать обычно еще сложнее. Что же следует думать когда это возможно - см. комментарий к следующей цитате (1-е предложение). Цитата:
Судя по всему было там у тебя чего-то вроде: Код:
dx = x2 - x1
dy = y2 - y1
for x from x1 to x2 {
y = y1 + (dy) * (x - x1)/(dx)
plot(x, y)
}
что было заменено на Код:
function line(x0, x1, y0, y1)
int deltax := abs(x1 - x0)
int deltay := abs(y1 - y0)
real error := 0
real deltaerr := deltay / deltax // Assume deltax != 0 (line is not vertical)
int y := y0
for x from x0 to x1
plot(x,y)
error := error + deltaerr
if error ≥ 0.5 then
y := y + 1
error := error - 1.0
Естественно все это дополняется проверками направления (несколько условий в самом начале кода). В первом случае на каждый пиксель требуется 1 floating-point умножение и деление. Во втором случае с некоторыми модификациями можно обойтись только целочисленным сложением. Не на всех машинах образца 1993 года был арифметический сопроцессор. А если он и был, то как правило был на отдельной микросхеме. В результате floating-point операции занимали несравненно больше времени чем целочисленные. А умножение, и особенно деление - гораздо больше чем сложение. Верно это и сегодня уже не в той степени как тогда. Использование тогда деления в критическом цикле иначе как кощунством не назовешь. Сегодня такого выигрыша по скорости уже не получится. З.Ы.: Бараны были, есть и будут (есть), однако не ими одними полон мир. Не пользуйте помоешные тулзы - когда в мире есть нормальные. |
||
|
|
|