Подскажите как перевести эту формулу в псевдокод?
https://dl.dropboxusercontent.com/u/6439155/or1.png
https://dl.dropboxusercontent.com/u/6439155/or2.png
https://www.cs.princeton.edu/courses...her/sld024.htm
Вид для печати
Подскажите как перевести эту формулу в псевдокод?
https://dl.dropboxusercontent.com/u/6439155/or1.png
https://dl.dropboxusercontent.com/u/6439155/or2.png
https://www.cs.princeton.edu/courses...her/sld024.htm
Ты по PureBasic прикалываешься, погугли што ли..
Не нашел файлика, осталась выдранная текстовка
Спасибо. Но я все равно не понял:
откуда 4 и что такое D и U
У меня конечная цель не конвертировать картинки, а получить именно сам узор "чанок" в зависимости от произвольно заданного размера матрицы (чанка).
То есть на выходе псевдо кода хотелось бы получать массив типа:
0 8 2 10 12 4 14 6 3 11 1 9 15 7 13 5
Писал я код по статейке, но куда-то потерял( Вот код, который гоблин написал(для ужясм):
- - - Добавлено - - -Код:;69 bytes -2
device zxspectrum128
ORG #6000
begin
matrix:
db 0*8,8*8,2*8,10*8
db 12*8,4*8,14*8,6*8
db 3*8,11*8,1*8,9*8
db 15*8,7*8,13*8,5*8
gench:
; For y=0 To 128;;;;;+8
; For x=0 To 7
; i=x&3
; j=y&3
; II=y>>3
; If II <= D(i,j)
; Plot(x,y,0)
; Else
; Plot(y,x,RGB(255,255,255))
; EndIf
; Next x
; Next y
ld hl,$4000
ld b,$80;bit weight
ld e,0;y
for_y:
ld d,0;x
push hl
for_x:
push hl
; i=x&3
; j=y&3
ld a,e;y
and 3
ld c,a
add a,a
add a,a;c
ld c,a
ld a,d;x
and 3
add a,c
ld l,a
ld h,matrix/256
ld a,e;II=y>>3
; and %11111000
; rra:rra:rra
cp (hl); If II <= D(i,j)
pop hl
;; jr z,plot
jr c,noplot
plot:
ld a,b:or (hl):ld (hl),a
noplot:
inc h
inc d
bit 3,d:jr z,for_x
pop hl
or a:rrc b:jr nc,nonextp
inc l
nonextp:
inc e:bit 7,e:jr z,for_y
jr $
end
display /d,end-begin
savesna "!gc.sna",gench;;begin
упс, нашол.
На выходе получаешь chunk.png
Спасибо. Но мне все таки нужен код именно для получения вот этого
Data.i 0,8,2,10
Data.i 12,4,14,6
Data.i 3,11,1,9
Data.i 15,7,13,5
остальное то отрисовать не сложно. )
Не особо заморачивался алгоритмом, брал готовые матрицы
здесь http://caca.zoy.org/wiki/libcaca/study/2 тожно не особо ясно.
В принципе вроде не сложно, но размерность чанок степени двойки(4х4,8х8,16х16...). Подходит? Если да могу в меру своего косноязычия описать что то типа алгоритма.
Побаловался немного на ассемблере Z80.
Начинается всё с матрицы 1х1 содержащий нолик.
Все промежуточные матрицы хранятся в углу массива 8х8. "Matrix" 8080H
Следующая матрица получается так: (матрица умножается на константу 4, потом 3 раза копируется: (по диагонали с добавлением единички, и по ортам с добавлением 2 и 3) )
Прилагаю ассемблер (sjasmplus) с небольшими комментариями, говорящими метками и нарочитыми подпрограммами, и снапшот.
Вкратце
e(n,x,y) - элемент матрицы размерностью 2^n в строке y столбца x
рекурсивная формула
e(n,x,y)=e(n-1,x div 2,y div 2)+e(1,x mod 2,y mod 2)*2^n
матрица E(1)=[[3,1],[0,2]] определяет изначальный паттерн и соответственно элементы e(1,x,y) берутся из нее.
Разница с формулой в стартовом сообщении в использовании в качестве индекса степени, а не размерности.
исправления http://zx-pk.ru/showthread.php?t=263...l=1#post863984
add
Кстати переделать под другую размерность изначального паттерна проще простого, немного обобщаем и
e(n,x,y)=e(n-1,x div r,y div r)+e(1,x mod r,y mod r)*r^n
где r соответственно размерность