首页
社区
课程
招聘
[原创][易经]六十四卦圆图
发表于: 2010-9-26 12:49 10049

[原创][易经]六十四卦圆图

2010-9-26 12:49
10049
以前写的,怕烂在电脑里,就拿出来晒晒吧~

因为数字不好,里面直线没画好,谁有兴趣可以把直线画规矩点



算法部分:
WenW64Gua proc Hwnd,IXI
local hdc,ps:PAINTSTRUCT,Penhandle,hMemDC,rect:RECT,bitmap,Brush
local yx,yy,x[4]:DWORD ,y[4]:DWORD ,r,g,hd:REAL8,fc
local Wx,Nx,yg,i,s,ii,XX,iii;外爻,内爻,卦
						invoke GetDC,Hwnd
				      mov    hdc,eax 
				      invoke CreateCompatibleDC,hdc ;创建内存DC
				      mov    hMemDC,eax 
				      invoke GetClientRect,Hwnd,addr rect 
				      mov eax,rect.bottom
						sub eax,rect.top ;高
						mov ecx,rect.right
						sub ecx,rect.left ;宽
						push eax
						push ecx
						push hdc
						mov yy,400;圆心y
						mov yx,400;圆心x
						mov r,300 ;半径
						mov g,6 ;高度初始化
						mov fc,64*2
						
						;弧度 = 3.1415926535 ÷ (64 × 2)
						finit ;初始化FPU
						fild fc ;128 把圆分成128*2分
						FLDPI ;将pi装入
						FDIV st,st(1) ; PI/128
						FST hd  ;结果保存到弧度
						mov yg,0;卦初始化值
				      call CreateCompatibleBitmap;创建位图
				      mov bitmap,eax
						invoke SelectObject,hMemDC,bitmap
				      invoke CreatePen,PS_SOLID,2,0  
				      mov Penhandle,eax
				      invoke SelectObject,hMemDC,eax
				      invoke SetBkMode,hMemDC,TRANSPARENT
				      invoke CreateSolidBrush,00808080H;设置位图背景色
				      mov Brush,eax
				      invoke SelectObject,hMemDC,eax
				      invoke FloodFill,hMemDC,NULL,NULL,255;;设置位图背景色
				      
				      ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>    
						mov i, 4 ;初始计次值
						mov s,0
						j1:
						cmp s,64
						je j2
						inc s
						mov eax,yg
						push eax
						and eax,7
						mov Wx,eax
						pop eax
						shr eax,3
						mov Nx,eax
						mov ii,0
						j3:
						cmp ii,6 ;循环6次
						je j4
						invoke DeleteObject,Penhandle ;删除原来的画笔
						mov eax,offset Xsb
						.if ii <=2
							mov ecx,Wx
							.else
							mov ecx,Nx
						.endif
							invoke CreatePen,PS_SOLID,2,[eax+ecx*4]
							mov Penhandle,eax
				         invoke SelectObject,hMemDC,eax
						mov eax,yg
						mov ecx,ii
						shr eax,cl
						and eax,1
						mov XX,eax;爻
					   mov iii,0
					   j5:
					   cmp iii,4
					   je j6
						;            X [iii] = 圆心X + (半径 + G × (6 - ii)) × 求正弦 ((i + IXI - iii) × 弧度)
						;            Y [iii] = 圆心Y + (半径 + G × (6 - ii)) × 求余弦 ((i + IXI - iii) × 弧度)
						
						push 0 ;计次
						j7:
						cmp BYTE ptr[esp],2
						je j8
						mov eax,i
						add eax,IXI
						sub eax,iii
						dec eax
						push eax ;(i + IXI - iii)
						finit
						fild WORD ptr [esp]
						pop eax
						fld hd
						fmul st,st(1) 
						.if BYTE ptr [esp]==0
							fsin ;求正弦 ((i + IXI - iii) × 弧度
							.else
							fcos;求余弦 ((i + IXI - iii) × 弧度)
						.endif	
						mov eax,6
						sub eax,ii
						mov ecx,g ;高
						imul eax,ecx;G × (6 - ii)
						add eax,r ;半径 + G × (6 - ii)
						push eax
						fild WORD ptr [esp]
						pop eax
						fmul st,st(1) ;(半径 + G × (6 - ii)) × 求正弦 ((i + IXI - iii) × 弧度)
						mov eax,iii
						.if BYTE ptr [esp]==0
							FISTP DWORD ptr x[eax*4]
							mov ecx,yx
							add x[eax*4],ecx ; +圆心X
							.else
							FISTP DWORD ptr y[eax*4]
							mov ecx,yy
							add y[eax*4],ecx ; +圆心Y
						.endif
						inc BYTE ptr [esp] ;两次,第一次计算X [iii],第二次计算y [iii]
						jmp j7
						j8:
						pop eax
					   inc iii 
					   jmp j5
					   j6:
					   mov eax,XX
					   .if eax==1; ' 画阳爻
					   invoke MoveToEx,hMemDC,x[3*4],y[3*4],NULL
						invoke LineTo,hMemDC,x[0],y[0]
					   	.else;画阴爻
					   invoke MoveToEx,hMemDC,x[3*4],y[3*4],NULL
						invoke LineTo,hMemDC,x[2*4],y[2*4]
						invoke MoveToEx,hMemDC,x[4],y[4],NULL
						invoke LineTo,hMemDC,x[0],y[0]
					   .endif
						inc ii ;累加
						jmp j3
						j4:
						add i,4
						 .if yg==31
						 	mov yg,63
						 	.elseif yg <31
						 		inc yg
						 	.else
						 		dec yg		
						 .endif
						jmp j1
						j2:
						;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>.
				      invoke BitBlt,hdc,0,0,rect.right,rect.bottom,hMemDC,0,0,SRCCOPY 
				      invoke DeleteObject,bitmap
						invoke DeleteDC,hMemDC
						invoke ReleaseDC,Hwnd,hdc
						invoke DeleteObject,Penhandle
						invoke DeleteObject,Brush
ret
WenW64Gua endp

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

上传的附件:
收藏
免费 7
支持
分享
最新回复 (12)
雪    币: 40
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
呵呵,有点意思,支持个
2010-9-26 12:54
0
雪    币: 224
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
好,厉害,数学帝
2010-9-26 12:58
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
这哥们数学好好....
2010-9-26 15:15
0
雪    币: 433
活跃值: (1875)
能力值: ( LV17,RANK:1820 )
在线值:
发帖
回帖
粉丝
5
正中再画个八卦上去,就功德圆满了!
2010-9-26 15:22
0
雪    币: 362
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
数学博大精深呀~~~
2010-9-26 15:50
0
雪    币: 270
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
强大啊,拿去算命,呵呵
2010-9-26 15:59
0
雪    币: 1491
活跃值: (975)
能力值: (RANK:860 )
在线值:
发帖
回帖
粉丝
8
看不懂啊,真的
2010-9-26 16:57
0
雪    币: 233
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
同5楼的 中间在画上太极正时针转就更完美了~
2010-10-1 23:34
0
雪    币: 826
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
下了,感觉不错啊
2010-10-1 23:57
0
雪    币: 5
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
易经。唉。。。。分阴阳爻 没有外爻,内爻之分!!
2010-10-2 10:14
0
雪    币: 656
活跃值: (448)
能力值: ( LV12,RANK:360 )
在线值:
发帖
回帖
粉丝
12
写错了..应该是内卦和外卦
2010-10-17 16:43
0
雪    币: 172
活跃值: (573)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
膜拜LZ的数学能里
2010-10-17 17:05
0
游客
登录 | 注册 方可回帖
返回
//