SDK写的一个画树(花)程序

[img]C:\Documents and Settings\All Users\Documents\My Pictures\示例图片\Sunset.jpg[/img]从国外一个网站上抄来的,是用C+SDK写的,惭愧看不大懂,转成D版本先:

module flower;

import std.stdio;
import std.string;
import std.conv;
import std.math;
import std.algorithm;
import core.runtime;
//import core.stdc.math;

import win32.windows;

import samsTools.utils:toCstring;


const double Pi=3.1415926;

static TCHAR[256] szAppName=cast(char[256])"flower";
static const char[256] caption=cast(char[256])"SDK Flower Example";

int xo=320,yo=860;
int r=0,g=0,b=0;
HDC hddc;

float alfa0,beta0,gamma0,Riduzione;
struct elem2 { float x; float y; };
struct elem3 { float x; float y; float z; };

float sen (float r)
{ return sin(r); }

int Round (float nf)
{ int k;
float t,f;

k=cast(int)nf; t=cast(float)k;
f=nf-t;
if (f>0.50) k++;
if (f<-0.50) k--;
return k;
}

void putpixel (int x,int y)
{
SetPixel(hddc,x,y,RGB(cast(ubyte)r,cast(ubyte)g,cast(ubyte)b));
}

void setcolor (int col)
{ if (col==15) {r=0;g=0;b=255;}
if (col==14) {r=255;g=0;b=0;}
if (col==13) {r=0;g=255;b=0;}
if (col==12) {r=255;g=0;b=0;}
if (col==11) {r=0;g=255;b=255;}
if (col==10) {r=0;g=255;b=0;}
if (col==9) {r=0;g=0;b=255;}
if (col==8) {r=255;g=0;b=0;}
if (col==7) {r=0;g=100;b=0;}
}

void swap(int *a, int *b)
{ int t;
t=*b; *b=*a; *a=t;
}

void dasline (int x1,int y1,int x2,int y2)
{ int x,dx,incx;
int y,dy,incy;
int s,i,pxy,sw;

dx=abs(x2-x1);
dy=abs(y2-y1);

if (x1>x2) incx=-1; else incx=1;
if (y1>y2) incy=-1; else incy=1;

if (dy>dx) { swap(&dx,&dy); swap(&incx,&incy); swap(&x1,&y1); sw=1; }
else sw=0;

pxy=dx;
dx=dx-dy;
s=dy;
x=x1; y=y1;
if (sw) putpixel(y,x); else putpixel(x,y);
for (i=0;i<pxy;i++)
{ x+=incx;
if (s>0) {s-=dx; y+=incy;} else {s+=dy;}
if (sw) putpixel(y,x); else putpixel(x,y);
}
}

void RAss (elem3 *Vt, float xo, float yo, float zo,
float alfa,float beta,float gamma)
{ float x2,y2,z2,x1,y1,z1,x,y,z;

x2=Vt.x ; y2=Vt.y ; z2=Vt.z ;
x1=x2*cos(gamma)-z2*sen(gamma);
z1=x2*sen(gamma)+z2*cos(gamma);
z=z1*cos(beta)-y2*sen(beta)+zo;
y1=z1*sen(beta)+y2*cos(beta);
x=x1*cos(alfa)-y1*sen(alfa)+xo;
y=x1*sen(alfa)+y1*cos(alfa)+yo;
Vt.x=x; Vt.y=y; Vt.z=z;
}
void Rids (elem3 *vt3,elem2 *vt2)
{ float fi,yp;

vt2.x=-vt3.z*sen(Pi/4)+vt3.x*cos(Pi/4);
fi=0.5;
yp=-vt3.x*sen(fi)+vt3.y*cos(fi);
vt2.y=-vt3.z*sen(fi)+yp*cos(fi);
}
void Co(elem2 *vp, elem2 *vf)
{ int X1,X2,Y1,Y2;
X1=xo+cast(int)(vp.x); Y1=yo-cast(int)(vp.y);
X2=xo+cast(int)(vf.x); Y2=yo-cast(int)(vf.y);
dasline(X1,Y1,X2,Y2);
}
void Disegna (float R,float Xo,float Yo,float Zo,
float alfa,float beta,float gamma)
{ int i;
elem2 V2[3];
elem3 V3[3];

V3[1].x=0 ; V3[1].y=R ; V3[1].z=0 ;
V3[2].x=0 ; V3[2].y=0 ; V3[2].z=0;
for (i=1;i<3;i++) RAss (&V3[i],Xo,Yo,Zo,alfa,beta,gamma);
for (i=1;i<3;i++) Rids (&V3[i],&V2[i]);
Co (&V2[1],&V2[2]);
}
void Frattale (int n, float R,float Xrif,float Yrif,float Zrif,
float Rifa,float Rifb,float Rifg)
{ int rip;
float R1,PasAlfa,PasBeta,PasGamma;
elem3 pv;
elem3 V3[3];

if (n<9)
{ V3[1].x=0 ; V3[1].y=R ; V3[1].z=0 ;
V3[2].x=R ; V3[2].y=0 ; V3[2].z=0;
R1=R/Riduzione;
for (rip=1;rip<4;rip++)
{ pv.x=V3[1].x; pv.y=V3[1].y; pv.z=V3[1].z;
switch (rip)
{ case 1 : PasAlfa=Rifa+alfa0; PasBeta=Rifb+beta0;
PasGamma=Rifg+gamma0;
break;
case 2 : PasAlfa=Rifa-alfa0; PasBeta=Rifb-beta0;
PasGamma=Rifg-gamma0;
break;
case 3 : PasAlfa=Rifa+alfa0; PasBeta=Rifb-beta0;
PasGamma=Rifg-gamma0;
}
if (n<2) setcolor(10);
if ((n>1) && (n<8)) setcolor(15);
if (n==8) setcolor(12);
RAss (&pv,Xrif,Yrif,Zrif,Rifa,Rifb,Rifg);
Disegna(R1,pv.x,pv.y,pv.z,PasAlfa,PasBeta,PasGamma);
Frattale(n+1,R1,pv.x,pv.y,pv.z,PasAlfa,PasBeta,PasGamma);
}
}
}

void fracto()
{
setcolor(10);
Riduzione=2.0; alfa0=-0.3; beta0=0.2; gamma0=0.1;
Frattale(0,500,0,0,0,0,0,0);
}


extern(Windows)
int WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow)
{
//initialize D runtime
Runtime.initialize;
runModuleUnitTests;

HWND hwnd;
MSG msg;
WNDCLASS wndclass;

wndclass.style=CS_HREDRAW|CS_VREDRAW;
wndclass.lpfnWndProc=&WndProc;
wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
wndclass.hInstance=hInstance;
wndclass.hIcon=LoadIcon(null,IDI_APPLICATION);
wndclass.hCursor=LoadCursor(null,IDC_ARROW);
wndclass.hbrBackground=cast(HBRUSH)(COLOR_3DFACE+1);//GetStockObject(WHITE_BRUSH)
wndclass.lpszMenuName=null;
wndclass.lpszClassName=cast(const(char*))szAppName;

if(! RegisterClass(&wndclass))
{
MessageBox(null,toCstring("Program requires Windows NT!"),
cast(char*)szAppName,MB_ICONERROR);
return 0;
}

hwnd=CreateWindow(szAppName.ptr,caption.ptr,
WS_OVERLAPPEDWINDOW/*|WS_VSCROLL|WS_HSCROLL*/,
CW_USEDEFAULT,CW_USEDEFAULT,
CW_USEDEFAULT,CW_USEDEFAULT,
null,null,hInstance,null);

ShowWindow(hwnd,iCmdShow);
UpdateWindow(hwnd);

while(GetMessage(&msg,null,0,0)>0)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}

//dispose D runtime:
Runtime.terminate;


return msg.wParam;

}

extern(Windows)
LRESULT WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
RECT rect;

switch(message)
{
case WM_CREATE:
return 0;

case WM_PAINT:
hdc=BeginPaint(hwnd,&ps);
GetClientRect(hwnd,&rect);
hddc=hdc;
fracto();
EndPaint(hwnd,&ps);
return 0;

case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_CLOSE:
PostMessage(null,WM_QUIT,0,0);
break;
default:
break;
}
return DefWindowProc(hwnd,message,wParam,lParam);
}



运行时截图:
本项目是一个基于SSM(Spring+SpringMVC+MyBatis)框架和Vue.js前端技术的大学生第二课堂系统,旨在为大学生提供一个便捷、高效的学习和实践平台。项目包含了完整的数据库设计、后端Java代码实现以及前端Vue.js页面展示,适合计算机相关专业的毕设学生和需要进行项目实战练习的Java学习者。 在功能方面,系统主要实现了以下几个模块:用户管理、课程管理、活动管理、成绩管理和通知公告。用户管理模块支持学生和教师的注册、登录及权限管理;课程管理模块允许教师上传课程资料、设置课程时间,并由学生进行选课;活动管理模块提供了活动发布、报名和签到功能,鼓励学生参与课外实践活动;成绩管理模块则用于记录和查询学生的课程成绩和活动参与情况;通知公告模块则实时发布学校或班级的最新通知和公告。 技术实现上,后端采用SSM框架进行开发,Spring负责业务逻辑层,SpringMVC处理Web请求,MyBatis进行数据库操作,确保了系统的稳定性和扩展性。前端则使用Vue.js框架,结合Axios进行数据请求,实现了前后端分离,提升了用户体验和开发效率。 该项目不仅提供了完整的源代码和相关文档,还包括了详细的数据库设计文档和项目部署指南,为学习和实践提供了便利。对于基础较好的学习者,可以根据自己的需求在此基础上进行功能扩展和优化,进一步提升自己的技术水平和项目实战能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值