Vistas de página en total

viernes, 28 de marzo de 2014

DISTANCIA ENTRE DOS PIXEL

    Para poder realizar el ejemplo con circulos, necesito poder pasar a la función circle el radio, tomandolo de la posición dadapor el ratón. Es decir el primer punto que elija con el ratón será el origen del circulo y el  segundo punto será un extremo que definirá el radio.
   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.