mortezamsp
یک شنبه 06 دی 1388, 00:25 صبح
رسم خط رو که بلدی ؟
تو یه حلقه ، هربار یه خط از x تا y رسم میکنی و بعد مقدار x,y رو اظافه میکنی .مثلا یه واحد . این میشه یه متواضی الاضلاع رنگ شده .
sjhosseini
یک شنبه 06 دی 1388, 10:07 صبح
از این ماکروها می تونی استفاده کنی
سه ماکرو نوشتم Line, Bar , Rectangle
Line macro x1,y1,x2,y2,color
LOCAL else1, jmp1, jmp2
LOCAL else2
LOCAL else3
LOCAL while1
LOCAL while2
LOCAL next1
LOCAL next2
LOCAL continue1
LOCAL continue2
LOCAL exit
;dy = y2 - y1;
mov ax,y2
sub ax,y1
mov ddy,ax
;dx = x2 - x1;
mov ax,x2
sub ax,x1
mov ddx,ax
;if (dy < 0) { dy = -dy; stepy = -1; } else { stepy = 1; }
cmp ddy,0
jge else1
neg ddy
mov stepy,-1
jmp far ptr next1
else1: mov stepy,1
next1:
;if (dx < 0) { dx = -dx; stepx = -1; } else { stepx = 1; }
cmp ddx,0
jge else2
neg ddx
mov stepx,-1
jmp far ptr next2
else2: mov stepx,1
next2:
;dy=2*dy , dx=2*dx
mov ax,ddy
add ax,ax
mov ddy,ax
mov ax,ddx
add ax,ax
mov ddx,ax
;X=x1 , Y=y1
mov ax,x1
mov XX,ax
mov ax,y1
mov YY,ax
;putpixel(XX,YY,color)
mov cx, XX ; column
mov dx, YY ; row
mov al, color ; white
mov ah, 0ch ; put pixel
int 10h
mov ax,ddx
cmp ax,ddy
jng else3
;if(dx>dy)
;{
;fraction =2*dy-dx
mov ax,ddy
add ax,ax
sub ax,ddx
mov fraction,ax
while1: mov ax, XX
cmp ax, word ptr x2
;je far ptr exit
jne jmp1
jmp far ptr exit
jmp1:
;while (XX!=x2)
;{
cmp fraction,0
jl continue1
;Y += stepy
mov ax,YY
add ax,stepy
mov YY,ax
;fraction -= dx
mov ax,fraction
sub ax,ddx
mov fraction,ax
continue1: ;X += stepx
mov ax,XX
add ax,stepx
mov XX,ax
;fraction += dy
mov ax,fraction
add ax,ddy
mov fraction,ax
;putpixel(XX,YY,color)
mov cx, XX ; column
mov dx, YY ; row
mov al, color ; white
mov ah, 0ch ; put pixel
int 10h
jmp far ptr while1
;}
;}
else3: ;else
;{
;fraction = 2*dx-dy
mov ax,ddx
add ax,ax
sub ax,ddy
mov fraction,ax
while2: mov ax, YY
cmp ax,word ptr y2
;je far ptr exit
jne jmp2
jmp far ptr exit
jmp2:
;while (YY!=y2)
;{
cmp fraction,0
jl continue2
;XX += stepx
mov ax,XX
add ax,stepx
mov XX,ax
;fraction -= dy
mov ax,fraction
sub ax,ddy
mov fraction,ax
continue2: ;YY += stepy
mov ax,YY
add ax,stepy
mov YY,ax
;fraction += dx
mov ax,fraction
add ax,ddx
mov fraction,ax
;putpixel(XX,YY,color)
mov cx, XX ; column
mov dx, YY ; row
mov al, color ; white
mov ah, 0ch ; put pixel
int 10h
jmp far ptr while2
;}
;}
exit:
endm
Rectangle macro x1,y1,x2,y2,color
Line x1,y1,x2,y1,color
Line x2,y1,x2,y2,color
Line x2,y2,x1,y2,color
Line x1,y2,x1,y1,color
endm
Bar macro x1,y1,x2,y2,color
LOCAL next,loop1,jmp1,exit,Yend
Yend dw ?
mov ax,y1
sub ax,y2
jge next
neg ax
next: mov cx,ax
mov ax,y1
mov Yend,ax
loop1: cmp cx,-1
jne jmp1
jmp far ptr exit
jmp1:
dec cx
push cx
Line x1,Yend,x2,Yend,color
pop cx
inc Yend
jmp loop1
exit:
endm
برای صدا زدن ماکروها از این کدها استفاده کن
mov x1,0
mov y1,0
mov x2,300
mov y2,200
mov color,3
Bar x1,y1,x2,y2,color
قبلاش متغیرهای x,y را تعریف کن
موفق باشید
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.