Брезенхем: Алгоритм построения окружности — различия между версиями

Материал из SpeccyWiki
Перейти к: навигация, поиск
(Содержимое страницы заменено на «Статья удаленна из-за самоуправства рязанского пидора Димачки Быстров…»)
м (Отмена правки 35917, сделанной участником Goblinish (обс.) - оскорбление, вандализм)
 
Строка 1: Строка 1:
Статья удаленна из-за самоуправства рязанского пидора Димачки Быстрова.Сдохни с туберкулеза гнида
+
Процедура использует дополнительные данные, расположенные по адресу '''#6000-#63FF'''.Данные предназначены для построения точек. Перед использованием алгоритма необходимо вызвать '''mkbod'''. Входные параметры:,BC=YX координаты центра радиуса, A-радиус.
 +
Автор алгоритма-Busy.
 +
 
 +
пример вызова процедуры:
 +
<code><pre>
 +
        ORG #8000
 +
 
 +
tabbod  =  #6000
 +
 
 +
begin
 +
run  call  mkbod
 +
  xor  a;радиус =0
 +
slucka  push  af 
 +
  ld  bc,#6080; координаты центра 
 +
  call  circle 
 +
  pop  af 
 +
  add  a,#03;увеличим радиус на 3
 +
  cp  #60 
 +
  jr  c,slucka
 +
stu jr stu
 +
  ret
 +
mkbod  ld  ix,tabbod 
 +
  ld  hl,#4000 
 +
mkbb1  ld  (ix+#00),h 
 +
  inc  xh 
 +
  ld  (ix+#00),l 
 +
  dec  xh 
 +
  call  dole 
 +
  inc  xl 
 +
  jr  nz,mkbb1 
 +
  inc  xh 
 +
  inc  xh 
 +
mkbb2  ld  a,xl 
 +
  rrca   
 +
  rrca   
 +
  rrca   
 +
  and  #1f 
 +
  ld  (ix+#00),a 
 +
  ld  a,xl 
 +
  cpl   
 +
  add  a,a 
 +
  add  a,a 
 +
  add  a,a 
 +
  or  #c7 
 +
  ld  (mkbb3+1),a 
 +
  xor  a 
 +
mkbb3  set  1,a 
 +
  inc  xh 
 +
  ld  (ix+#00),a 
 +
  dec  xh 
 +
  inc  xl 
 +
  jr  nz,mkbb2 
 +
  ret   
 +
     
 +
dole  inc  h 
 +
  ld  a,h 
 +
  and  #07 
 +
  ret  nz 
 +
  ld  a,#20 
 +
  add  a,l 
 +
  ld  l,a 
 +
  ret  c 
 +
  ld  a,#f8 
 +
  add  a,h 
 +
  ld  h,a 
 +
  ret 
 +
 
 +
</pre></code>
 +
 
 +
процедура рисования окружности
 +
 
 +
<code><pre>
 +
circle  ld  d,a 
 +
  or  a 
 +
  jp  z,bod 
 +
  inc  a 
 +
  ld  h,b 
 +
  ld  l,c 
 +
  ld  (xy14+1),hl 
 +
  ld  (xy15+1),hl 
 +
  ld  (xy16+1),hl 
 +
  ld  (xy17+1),hl 
 +
  ld  xl,a 
 +
  dec  a 
 +
  ld  e,a 
 +
  ld  a,d 
 +
  add  a,b 
 +
  ld  b,a 
 +
  push  de 
 +
  call  bod 
 +
  pop  de 
 +
  ld  a,b 
 +
  sub  d 
 +
  sub  d 
 +
  ld  b,a 
 +
  push  de 
 +
  call  bod 
 +
  pop  de 
 +
  ld  a,b 
 +
  add  a,d 
 +
  ld  b,a 
 +
  ld  a,c 
 +
  add  a,e 
 +
  ld  c,a 
 +
  push  de 
 +
  call  bod 
 +
  pop  de 
 +
  ld  a,c 
 +
  sub  e 
 +
  sub  e 
 +
  ld  c,a 
 +
  call  bod 
 +
  ld  d,#00 
 +
  ld  h,d 
 +
  ld  l,d 
 +
  ld  e,xl 
 +
  ld  ix,#ff 
 +
e130  inc  d 
 +
  ld  c,d 
 +
  ld  b,#00 
 +
  add  hl,bc 
 +
     
 +
  ld  a,h 
 +
  add  a,a 
 +
  jr  nz,e130 
 +
  push  hl 
 +
  add  hl,hl 
 +
  add  hl,hl 
 +
  xor  a 
 +
  ld  b,a 
 +
  ld  c,e 
 +
  sbc  hl,bc 
 +
  pop  hl 
 +
  jr  c,e130 
 +
     
 +
  ld  b,#00 
 +
  ld  c,e 
 +
  sbc  hl,bc 
 +
  dec  e 
 +
  push  hl 
 +
  call  eelin 
 +
  pop  hl 
 +
  ld  xl,d 
 +
  xor  a 
 +
  xor  xh 
 +
  jr  z,e130 
 +
  ret   
 +
     
 +
eelin  inc  xl 
 +
  ld  a,xl 
 +
  cp  e 
 +
  jr  z,eeln1 
 +
  ld  a,e 
 +
  cp  d 
 +
  jr  nc,eeln1 
 +
  ld  xh,d 
 +
  ret   
 +
eeln1  push  de 
 +
  push  ix 
 +
xy14  ld  bc,#5555 
 +
  ld  a,b 
 +
  add  a,e 
 +
  ld  b,a 
 +
  push  de 
 +
  call  ccnn1 
 +
  pop  de 
 +
xy15  ld  bc,#5555 
 +
  ld  a,b 
 +
  sub  e 
 +
  ld  b,a 
 +
  call  ccnn1 
 +
  pop  ix 
 +
  pop  de 
 +
  ld  a,d 
 +
  cp  e 
 +
  jr  nz,eeln2 
 +
  cp  xl 
 +
  ret  z 
 +
eeln2  push  de 
 +
  push  ix 
 +
xy16  ld  bc,#5555 
 +
  ld  a,c 
 +
  add  a,e 
 +
  ld  c,a 
 +
  push  de 
 +
  call  ccnn2 
 +
  pop  de 
 +
xy17  ld  bc,#5555 
 +
  ld  a,c 
 +
  sub  e 
 +
  ld  c,a 
 +
  call  ccnn2 
 +
  pop  ix 
 +
  pop  de 
 +
  ret   
 +
     
 +
ccnn1  push  bc 
 +
  push  de 
 +
  ld  a,c 
 +
  sub  d 
 +
  ex  af,af 
 +
  ld  a,c 
 +
  sub  xl 
 +
  ld  d,a 
 +
  ex  af,af 
 +
  ld  c,a 
 +
  call  rovno 
 +
  pop  de 
 +
  pop  bc 
 +
  ld  a,c 
 +
  add  a,d 
 +
  ld  d,a 
 +
  ld  a,c 
 +
  add  a,xl 
 +
  ld  c,a 
 +
  jp  rovno 
 +
 
 +
ccnn2  push  bc 
 +
  push  de 
 +
  ld  a,b 
 +
  sub  d 
 +
  ex  af,af 
 +
  ld  a,b 
 +
  sub  xl 
 +
  ld  d,a 
 +
  ex  af,af 
 +
  ld  b,a 
 +
  call  zvislo 
 +
  pop  de 
 +
  pop  bc 
 +
  ld  a,b 
 +
  add  a,d 
 +
  ld  d,a 
 +
  ld  a,b 
 +
  add  a,xl 
 +
  ld  b,a 
 +
  jp  zvislo
 +
;----------------------построение точки по координатам BC
 +
bod  ld  h, #60;!------high tabbod;>
 +
  ld  l,b 
 +
  ld  d,(hl) 
 +
  inc  h 
 +
  ld  a,(hl) 
 +
  inc  h 
 +
  ld  l,c 
 +
  or  (hl) 
 +
  ld  e,a 
 +
  inc  h 
 +
  ld  a,(de) 
 +
bodset  xor  (hl) 
 +
  ld  (de),a 
 +
  ret 
 +
</pre></code>
 +
 
 +
ссылки:
 +
http://ru.wikipedia.org/wiki/Алгоритм_Брезенхэма
 +
http://www.codenet.ru/progr/video/alg/alg4.php
 +
 
 +
[[Категория:Программирование графики]]

Текущая версия на 16:02, 2 сентября 2015

Процедура использует дополнительные данные, расположенные по адресу #6000-#63FF.Данные предназначены для построения точек. Перед использованием алгоритма необходимо вызвать mkbod. Входные параметры:,BC=YX координаты центра радиуса, A-радиус. Автор алгоритма-Busy.

пример вызова процедуры:

        ORG #8000

tabbod  =  #6000

begin
run  call  mkbod
  xor  a;радиус =0
slucka  push  af  
  ld  bc,#6080; координаты центра  
  call  circle  
  pop  af  
  add  a,#03;увеличим радиус на 3
  cp  #60  
  jr  c,slucka
stu jr stu
  ret
mkbod  ld  ix,tabbod  
  ld  hl,#4000  
mkbb1  ld  (ix+#00),h  
  inc  xh  
  ld  (ix+#00),l  
  dec  xh  
  call  dole  
  inc  xl  
  jr  nz,mkbb1  
  inc  xh  
  inc  xh  
mkbb2  ld  a,xl  
  rrca    
  rrca    
  rrca    
  and  #1f  
  ld  (ix+#00),a  
  ld  a,xl  
  cpl    
  add  a,a  
  add  a,a  
  add  a,a  
  or  #c7  
  ld  (mkbb3+1),a  
  xor  a  
mkbb3  set  1,a  
  inc  xh  
  ld  (ix+#00),a  
  dec  xh  
  inc  xl  
  jr  nz,mkbb2  
  ret    
      
dole  inc  h  
  ld  a,h  
  and  #07  
  ret  nz  
  ld  a,#20  
  add  a,l  
  ld  l,a  
  ret  c  
  ld  a,#f8  
  add  a,h  
  ld  h,a  
  ret  

процедура рисования окружности

circle  ld  d,a  
  or  a  
  jp  z,bod  
  inc  a  
  ld  h,b  
  ld  l,c  
  ld  (xy14+1),hl  
  ld  (xy15+1),hl  
  ld  (xy16+1),hl  
  ld  (xy17+1),hl  
  ld  xl,a  
  dec  a  
  ld  e,a  
  ld  a,d  
  add  a,b  
  ld  b,a  
  push  de  
  call  bod  
  pop  de  
  ld  a,b  
  sub  d  
  sub  d  
  ld  b,a  
  push  de  
  call  bod  
  pop  de  
  ld  a,b  
  add  a,d  
  ld  b,a  
  ld  a,c  
  add  a,e  
  ld  c,a  
  push  de  
  call  bod  
  pop  de  
  ld  a,c  
  sub  e  
  sub  e  
  ld  c,a  
  call  bod  
  ld  d,#00  
  ld  h,d  
  ld  l,d  
  ld  e,xl  
  ld  ix,#ff  
e130  inc  d  
  ld  c,d  
  ld  b,#00  
  add  hl,bc  
      
  ld  a,h  
  add  a,a  
  jr  nz,e130  
  push  hl  
  add  hl,hl  
  add  hl,hl  
  xor  a  
  ld  b,a  
  ld  c,e  
  sbc  hl,bc  
  pop  hl  
  jr  c,e130  
      
  ld  b,#00  
  ld  c,e  
  sbc  hl,bc  
  dec  e  
  push  hl  
  call  eelin  
  pop  hl  
  ld  xl,d  
  xor  a  
  xor  xh  
  jr  z,e130  
  ret    
      
eelin  inc  xl  
  ld  a,xl  
  cp  e  
  jr  z,eeln1  
  ld  a,e  
  cp  d  
  jr  nc,eeln1  
  ld  xh,d  
  ret    
eeln1  push  de  
  push  ix  
xy14  ld  bc,#5555  
  ld  a,b  
  add  a,e  
  ld  b,a  
  push  de  
  call  ccnn1  
  pop  de  
xy15  ld  bc,#5555  
  ld  a,b  
  sub  e  
  ld  b,a  
  call  ccnn1  
  pop  ix  
  pop  de  
  ld  a,d  
  cp  e  
  jr  nz,eeln2  
  cp  xl  
  ret  z  
eeln2  push  de  
  push  ix  
xy16  ld  bc,#5555  
  ld  a,c  
  add  a,e  
  ld  c,a  
  push  de  
  call  ccnn2  
  pop  de  
xy17  ld  bc,#5555  
  ld  a,c  
  sub  e  
  ld  c,a  
  call  ccnn2  
  pop  ix  
  pop  de  
  ret    
      
ccnn1  push  bc  
  push  de  
  ld  a,c  
  sub  d  
  ex  af,af  
  ld  a,c  
  sub  xl  
  ld  d,a  
  ex  af,af  
  ld  c,a  
  call  rovno  
  pop  de  
  pop  bc  
  ld  a,c  
  add  a,d  
  ld  d,a  
  ld  a,c  
  add  a,xl  
  ld  c,a  
  jp  rovno  

ccnn2  push  bc  
  push  de  
  ld  a,b  
  sub  d  
  ex  af,af  
  ld  a,b  
  sub  xl  
  ld  d,a  
  ex  af,af  
  ld  b,a  
  call  zvislo  
  pop  de  
  pop  bc  
  ld  a,b  
  add  a,d  
  ld  d,a  
  ld  a,b  
  add  a,xl  
  ld  b,a  
  jp  zvislo
;----------------------построение точки по координатам BC
bod  ld  h, #60;!------high tabbod;>
  ld  l,b  
  ld  d,(hl)  
  inc  h  
  ld  a,(hl)  
  inc  h  
  ld  l,c  
  or  (hl)  
  ld  e,a  
  inc  h  
  ld  a,(de)  
bodset  xor  (hl)  
  ld  (de),a  
  ret  

ссылки: http://ru.wikipedia.org/wiki/Алгоритм_Брезенхэма http://www.codenet.ru/progr/video/alg/alg4.php