首页
社区
课程
招聘
[原创]butterfly.asm
发表于: 2011-4-1 07:45 5409

[原创]butterfly.asm

2011-4-1 07:45
5409

;butterfly.asm
;蝴蝶曲线的极坐标方程如下:
;x=sin(t)(e^cos(t)-2cos(4t)-sin^5(t/12))
;y=cos(t)(e^cos(t)-2cos(4t)-sin^5(t/12))
;想看网页版的蝴蝶吗?请观赏我的主页!
;不足之处,敬请指导。
;QQ:112426112
;Email:leguanyuan at 126 dot com
;Homepage:http://correy.webs.com
.386
.model flat,stdcall
option casemap:none
include windows.inc
include kernel32.inc
include user32.inc
includelib user32.lib
includelib kernel32.lib
include gdi32.inc
includelib gdi32.lib

.code
hInstance dd ?
hWinMain dd ?
stMsg MSG <>
szClassName db "correy",0
szCaptionMain db "made by correy",0
pwndclassex dd 48,3,offset liuchunli,0,0,0,0,0,6,0,offset szClassName,0

cxClient DD ?
cyClient DD ?
x DD ?
y DD ?
x_offset DD ?
y_offset DD ?
colour DD ?
temp DD ?
oldcw word ?
newcw word ?

scaleX real4 0.0
scaleY real4 0.0
theta real4 0.0
incr real4 0.01
four real4 4.0
rep12 real4 0.08333333
scale real4 75.0
change_base real4 2.30258

liuchunli proc hWnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
LOCAL hdc:HDC, ps:PAINTSTRUCT      
.IF uMsg==WM_SIZE;改变窗口尺寸有效果,改变change_base参数更有效果。
  finit
  mov eax,lParam
  and eax,0ffffh
  mov cxClient,eax
  shr eax,2;1  
  mov x_offset,eax ;;;;;;;;;;;;
  invoke  GetSystemMetrics,SM_CXSCREEN
  mov temp,eax
  shr temp,7
  fild cxClient
  fidiv temp
  fstp scaleX  
  mov ebx,lParam
  shr ebx,16
  mov cyClient,ebx
  shr ebx,1  
  mov y_offset,ebx;;;;;;;;;;;;;
  invoke  GetSystemMetrics,SM_CYSCREEN
  mov temp,eax
  shr temp,7;6
  fild cyClient
  fidiv temp
  fstp scaleY
.ELSEIF uMsg==WM_PAINT  
  invoke BeginPaint,hWnd, ADDR ps
  mov hdc,eax
  finit  
  mov si,15700  
  .WHILE si > 0
    fld theta
    fmul rep12
    fsin
    fld st
    fmul st,st(1)
    fmul st,st(1)
    fmul st,st(1)
    fmul
    fld theta
    fmul four  
    fcos
    fld st
    fadd
    fsub  
    fld theta  
    fcos
    fldl2t
    fmulp st(1),st(0)  
    fld st(0)
    fstcw oldcw
    fwait
    mov ax,oldcw
    and ax,0f3ffh
    or ax,0400h
    mov newcw,ax
    fldcw newcw
    frndint
    fldcw oldcw
    fld st(0)
    fxch st(2)
    fsubrp st(1),st(0)
    fld1
    fchs
    fxch st(1)  
    fscale
    fstp st(1)
    f2xm1
    fld1
    faddp st(1),st(0)
    fmul st(0),st(0)
    fscale
    fstp st(1)
    fdiv change_base
    fadd
    fld theta
    fcos
    fmul st,st(1)
    fmul scaleX
    fiadd x_offset
    fistp x
    fld theta
    fsin
    fmul
    fmul scaleY
    fiadd y_offset
    fistp y  
    invoke SetPixel,hdc,x,y,colour  
    fld theta
    fadd incr
    fstp theta
    inc si
    add colour,999
  .ENDW
invoke EndPaint,hWnd,ADDR ps
.ELSEIF uMsg==WM_DESTROY
  invoke PostQuitMessage,0
.ELSE
  invoke DefWindowProc,hWnd,uMsg,wParam,lParam
ret
.ENDIF
xor eax,eax
ret
liuchunli endp

start:invoke GetModuleHandle,0
mov hInstance,eax
mov pwndclassex+20,eax
invoke LoadIcon,hInstance,1;其实这四行也可以去掉。
mov pwndclassex+24,eax
invoke LoadCursor,0,32512
mov pwndclassex+28,eax
invoke RegisterClassEx,addr pwndclassex
invoke CreateWindowEx,200h,offset szClassName,offset szCaptionMain,00cf0000h,80000000h,80000000h,1028,768,0,0,hInstance,0;0cf0000h  ca0000h
mov hWinMain,eax
invoke ShowWindow,hWinMain,1;不想显示这一两行也可以不要。
invoke UpdateWindow,hWinMain
again:invoke GetMessage,addr stMsg,0,0,0
  cmp eax,0
  je exit
  invoke TranslateMessage,addr stMsg;这一行也可以去掉,特别是不处理字符信息。
  invoke DispatchMessage,addr stMsg
jmp again
exit:invoke ExitProcess,0
end start
;made at 2010.03.30
;其实这个程序我十年前就应该写出。
;本人在社会的最底层混了10多年,最开始(1997年)是在建筑队做小工,在建筑行业一直干到2010年。
;本人简介:
;大学没有上
;高中没有考上
;职高没有上完
;初中毕业证没有领
;小学毕业证没有发
;国家的户口本记载:文盲或半文盲。
;也像研究生论文那样留下通讯地址:
;河南开封杞县圉镇徐疙瘩
;邮政编码:475204
;也象有些书上写的那样:
;感谢我的母校:圉镇初中,“科学,严谨,钻研,刻苦”。(自己总结哟!)
;              民赵小学,“好好学习,天天向上”。
;感谢我的老婆:杜岷娟,在我29岁之际认识了她,并全心全意的跟随我支持我。好歹这辈子没有打光棍。
;还要感谢一个人,是个牛人,更是恩人,因为商业机密,不便透露。
;更要说明一个人,她让我奋斗终生,此人更不可说。
;最后说一点,父母不支持我,母亲常说:“天天爬电脑前,当吃当喝,不能挣一分钱,还浪费电,走!跟我下地干活去!要么把粪拉地里!”
;                                     快30岁了亦如此,其悲如我上个世纪读《项脊轩记》!
;父亲从不与我说话,连吃饭都分开,很少与村内人说话,他老人家在农村太寂寞了,你若与我发信,你就寄给他好了,我定能收到(我四处漂泊,但每年都回家),他的名字叫:寇建业。
;注释:本人1998-1999年这两年热爱数学:钻研微分方程,无穷级数,球面三角等。


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 7
支持
分享
最新回复 (3)
雪    币: 349
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
看了你这几程序,都是和算法有关,楼主数学肯定牛。
2011-4-1 09:30
0
雪    币: 1149
活跃值: (888)
能力值: ( LV13,RANK:260 )
在线值:
发帖
回帖
粉丝
3
膜拜了。。。correy 你空间的密码。。。为什么要设个密码 呵呵  还好简单。。。不然都不能了解你的历史了。。学习了。。。。
2011-4-1 09:46
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
楼主经历不浅啊!哈哈 我也没上过高中啊。。哈哈
2011-4-3 10:59
0
游客
登录 | 注册 方可回帖
返回
//