|
Ф/\Ей|\/| Ну сами понимаете... должно быть место, которое не модерируется... Но не злоупотребляйте... |
![]() |
|
Опции темы | Опции просмотра |
|
![]() |
#1 | ||
Отличник форума
![]() Регистрация: 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 операции занимали несравненно больше времени чем целочисленные. А умножение, и особенно деление - гораздо больше чем сложение. Верно это и сегодня уже не в той степени как тогда. Использование тогда деления в критическом цикле иначе как кощунством не назовешь. Сегодня такого выигрыша по скорости уже не получится. З.Ы.: Бараны были, есть и будут (есть), однако не ими одними полон мир. Не пользуйте помоешные тулзы - когда в мире есть нормальные. |
||
![]() |
![]() |