Por lo tanto necxesitamos una funcion que nos permita calcular la distancia desde el primer punto al segundo, dado que esa distancia será el radio.
Como esta acción es muy interesante para otras aplicaciones, nos conviene generar una rutina y no aplicar el algoritmo directamente al programa de ejemplo. Aunque lleve un poco más de trabajo valdrá la pena.
A añadir a GRAPHICS.MAC
;definición de la llamada a Dist_pixel
;se le pasan las coordenadas de dos puntos y devuelve en ax la distancia
Dist_pixel macro x0,y0,x1,y1
ifndef _dist_pixel
extern _dist_pixel
endif
mov ax,x0
push ax
mov ax,y0
push ax
mov ax,x1
push ax
mov ax,y1
push ax call _dist_pixel
endm
DPIXEL.ASM
; Copyright (C) 2013 José Ángel Moneo Fernández ; This program is free software: you can redistribute it and/or modify ; it under the terms of the GNU General Public License as published by ; the Free Software Foundation, either version 3 of the License, or ; (at your option) any later version. ; This program is distributed in the hope that it will be useful, ; but WITHOUT ANY WARRANTY; without even the implied warranty of ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ; GNU General Public License for more details. ; You should have received a copy of the GNU General Public License ; along with this program. If not, see <http://www.gnu.org/licenses/>.include math.mac
;mide la distancia entre dos pixel
;se le pasa las coordenadas de los dos puntos y nos devuenve en ax la distancia en pixel
public _dist_pixel
model compact,pascal
.data
radio dw 0,0
ix dw 0,0 ;valor absoluto incremento x
iy dw 0,0 ; valort absoluto incremento de y
ix2 dw 0,0 ; cuadrado del incremento x
iy2 dw 0,0 ;cuadrado del incremento y
.code
_dist_pixel proc uses ,x0,y0,x1,y1
mov ax,y1
sub ax,y0 ;(y1-y0)
abs ax
mov iy,ax ;dy=abs(y1-y0)
pot iy,2,iy2 ;dy2=dy^2
mov ax,x1
sub ax,x0 ;(x1-x0)2
abs ax
mov ix,ax ;dx=abs(x1-x0)
pot ix,2,ix2 ;dx2=dx^2
suma ix2,iy2,radio ;(y1-y0)^2+(x1-x0)^2
sqr radio
ret
_dist_pixel endp
end
No hay comentarios:
Publicar un comentario
Si tienes algún comentario, duda o sugerencia, o si quieres aportar algún código creado a partir de las librerías expuestas aquí, por favor, indícamelo.