数值分析实验报告用样条插值法插值的方法生成字体T的轮廓高斯消去法的实现.docx
《数值分析实验报告用样条插值法插值的方法生成字体T的轮廓高斯消去法的实现.docx》由会员分享,可在线阅读,更多相关《数值分析实验报告用样条插值法插值的方法生成字体T的轮廓高斯消去法的实现.docx(19页珍藏版)》请在冰点文库上搜索。
![数值分析实验报告用样条插值法插值的方法生成字体T的轮廓高斯消去法的实现.docx](https://file1.bingdoc.com/fileroot1/2023-4/29/c57713d0-34df-43c7-b603-b56a384b05e6/c57713d0-34df-43c7-b603-b56a384b05e61.gif)
数值分析实验报告用样条插值法插值的方法生成字体T的轮廓高斯消去法的实现
实验报告
实验课程:
数值分析
学生代号:
钟华
学号:
6100410038
专业班级:
网络工程101班
2012年6月1日
目录
一、用样条插值法插值方法生成字体T和5的轮廓……………………3
二、原子弹爆炸………………………………………………………16
南昌大学实验报告一
学代号:
学号:
61004100038专业班级:
网络工程101班
实验类型:
□验证□综合■设计□创新实验日期:
实验成绩:
一、实验目的
11.:
用样条插值的方法生成字体T和5的轮廓
1.2:
C或C++语言用Bezier曲线生成并编写程序
二、实验基本原理和内容
Times-Roman字体:
T
P0x
P0y
P1x
P1y
P2x
P2y
P3x
P3y
237
620
237
620
237
120
237
120
237
120
237
35
226
24
143
19
143
19
143
19
143
0
143
0
143
0
143
0
435
0
435
0
435
0
435
0
435
19
435
19
435
19
353
23
339
36
339
109
339
109
339
108
339
620
339
620
339
620
507
620
529
602
552
492
552
492
552
492
576
492
576
492
576
492
576
492
570
662
570
662
570
662
570
662
6
662
6
662
6
662
6
662
0
492
0
492
0
492
0
492
24
492
24
492
24
492
48
662
71
620
183
620
183
620
183
620
237
620
237
620
Times-Roman字体:
5
P0x
P0y
P1x
P1y
P2x
P2y
P3x
P3y
149
597
149
597
149
597
345
597
345
597
368
597
365
599
368
606
368
606
406
695
368
606
406
695
406
695
397
702
406
695
397
702
397
676
382
676
372
676
351
676
351
676
351
676
351
676
142
676
142
676
33
439
142
676
33
439
33
439
32
438
32
436
32
434
32
434
32
428
35
426
44
426
44
426
74
426
109
420
149
408
149
408
269
372
324
310
324
208
324
208
324
112
324
37
185
37
185
37
165
37
149
44
119
66
119
66
86
90
65
99
42
99
40
99
14
99
0
87
0
62
0
62
0
34
65
0
121
0
121
0
205
0
282
27
333
78
333
78
378
123
399
180
399
256
399
256
399
327
381
372
333
422
333
422
288
468
232
491
112
512
112
512
112
512
149
597
149
597
Bezier曲线生成:
2.1、确定曲线的阶次;
2.2计算Bernstein基函数的表达式:
生成字体T
共分成15段,每段用了三次的代数方程,用Bezier曲线生成
当n=3时
其中
2.3.把Bezier曲.线中的Pk写成分量坐标的形式
2.4.确定一合适的步长;控制t从0到1变化,求出一系列(x,y)坐标点;将其用小线段顺序连接起来。
三、主要仪器设备及耗材
PC微机
Windows操作系统
MicrosoftVisualStudio6.0集成开发环境
MicrosoftVisualStudio6.0集成开发环境的MSDN
四、实验程序及运行结果
T的轮廓:
4.1.在MicrosoftVisualStudio6.0集成开发环境下新建一个典型的“HelloWord”程序(W)命名为T;
4.2.在T.cpp文件编写用于求X和Y的Bernstein基函数
代码如下:
doublef(doublet,doublex0,doublex1,doublex2,doublex3)
{
doublez;z=x0*(1-t)*(1-t)*(1-t)+x1*3*t*(1-t)*(1-t)+x2*3*t*t*(1-t)+x3*t*t*t;
returnz;
}
4.3.在函数体内声明doublet;
4.4.找到函数入口:
//DrawText(hdc,szHello,strlen(szHello),&rt,DT_CENTER);
插进如下代码;
#include"stdafx.h"
#include"resource.h"
#defineMAX_LOADSTRING100
//编写Bernstein基函数
doublef(doublet,doublex0,doublex1,doublex2,doublex3)
{
doublez;
z=x0*(1-t)*(1-t)*(1-t)+x1*3*t*(1-t)*(1-t)+x2*3*t*t*(1-t)+x3*t*t*t;
returnz;
}
//GlobalVariables:
HINSTANCEhInst;//currentinstance
TCHARszTitle[MAX_LOADSTRING];//Thetitlebartext
TCHARszWindowClass[MAX_LOADSTRING];//Thetitlebartext
//Fowarddeclarationsoffunctionsincludedinthiscodemodule:
ATOMMyRegisterClass(HINSTANCEhInstance);
BOOLInitInstance(HINSTANCE,int);
LRESULTCALLBACKWndProc(HWND,UINT,WPARAM,LPARAM);
LRESULTCALLBACKAbout(HWND,UINT,WPARAM,LPARAM);
intAPIENTRYWinMain(HINSTANCEhInstance,
HINSTANCEhPrevInstance,
LPSTRlpCmdLine,
intnCmdShow)
{
//TODO:
Placecodehere.
MSGmsg;
HACCELhAccelTable;
//Initializeglobalstrings
LoadString(hInstance,IDS_APP_TITLE,szTitle,MAX_LOADSTRING);
LoadString(hInstance,IDC_SHYAN1,szWindowClass,MAX_LOADSTRING);
MyRegisterClass(hInstance);
//Performapplicationinitialization:
if(!
InitInstance(hInstance,nCmdShow))
{
returnFALSE;
}
hAccelTable=LoadAccelerators(hInstance,(LPCTSTR)IDC_SHYAN1);
//Mainmessageloop:
while(GetMessage(&msg,NULL,0,0))
{
if(!
TranslateAccelerator(msg.hwnd,hAccelTable,&msg)){
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
returnmsg.wParam;
}
//
//FUNCTION:
MyRegisterClass()
//
//PURPOSE:
Registersthewindowclass.
//
//COMMENTS:
//
//Thisfunctionanditsusageisonlynecessaryifyouwantthiscode
//tobecompatiblewithWin32systemspriortothe'RegisterClassEx'
//functionthatwasaddedtoWindows95.Itisimportanttocallthisfunction
//sothattheapplicationwillget'wellformed'smalliconsassociated
//withit.
//
ATOMMyRegisterClass(HINSTANCEhInstance){
WNDCLASSEXwcex;
wcex.cbSize=sizeof(WNDCLASSEX);
wcex.style=CS_HREDRAW|CS_VREDRAW;
wcex.lpfnWndProc=(WNDPROC)WndProc;
wcex.cbClsExtra=0;
wcex.cbWndExtra=0;
wcex.hInstance=hInstance;
wcex.hIcon=LoadIcon(hInstance,(LPCTSTR)IDI_SHYAN1);
wcex.hCursor=LoadCursor(NULL,IDC_ARROW);
wcex.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName=(LPCSTR)IDC_SHYAN1;
wcex.lpszClassName=szWindowClass;
wcex.hIconSm=LoadIcon(wcex.hInstance,(LPCTSTR)IDI_SMALL);
returnRegisterClassEx(&wcex);
}
//FUNCTION:
InitInstance(HANDLE,int)
//PURPOSE:
Savesinstancehandleandcreatesmainwindow
//COMMENTS:
//Inthisfunction,wesavetheinstancehandleinaglobalvariableand
//createanddisplaythemainprogramwindow.
BOOLInitInstance(HINSTANCEhInstance,intnCmdShow){
HWNDhWnd;
hInst=hInstance;//Storeinstancehandleinourglobalvariable
hWnd=CreateWindow(szWindowClass,szTitle,WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,0,CW_USEDEFAULT,0,NULL,NULL,hInstance,NULL);
if(!
hWnd){
returnFALSE;
}
ShowWindow(hWnd,nCmdShow);
UpdateWindow(hWnd);
returnTRUE;
}
//
//FUNCTION:
WndProc(HWND,unsigned,WORD,LONG)
//PURPOSE:
Processesmessagesforthemainwindow.
//WM_COMMAND-processtheapplicationmenu
//WM_PAINT-Paintthemainwindow
//WM_DESTROY-postaquitmessageandreturn
LRESULTCALLBACKWndProc(HWNDhWnd,UINTmessage,WPARAMwParam,LPARAMlParam){
intwmId,wmEvent;
doublet;//声明t;
PAINTSTRUCTps;
HDChdc;
TCHARszHello[MAX_LOADSTRING];
LoadString(hInst,IDS_HELLO,szHello,MAX_LOADSTRING);
switch(message){
caseWM_COMMAND:
wmId=LOWORD(wParam);
wmEvent=HIWORD(wParam);
//Parsethemenuselections:
switch(wmId){
caseIDM_ABOUT:
DialogBox(hInst,(LPCTSTR)IDD_ABOUTBOX,hWnd,(DLGPROC)About);
break;
caseIDM_EXIT:
DestroyWindow(hWnd);
break;
default:
returnDefWindowProc(hWnd,message,wParam,lParam);
}
break;
caseWM_PAINT:
hdc=BeginPaint(hWnd,&ps);
//TODO:
Addanydrawingcodehere...
RECTrt;
GetClientRect(hWnd,&rt);
//DrawText(hdc,szHello,strlen(szHello),&rt,DT_CENTER);
//插入代码:
for(t=0.0;t<1.0;t=t+0.001)
{
SetPixel(hdc,740-f(t,237,237,237,237),670-f(t,620,620,120,120),RGB(255,7,9));
SetPixel(hdc,740-f(t,237,237,226,143),670-f(t,120,35,24,19),RGB(255,7,9));
SetPixel(hdc,740-f(t,143,143,143,143),670-f(t,19,19,0,0),RGB(255,7,9));
SetPixel(hdc,740-f(t,143,143,435,435),670-f(t,0,0,0,0),RGB(255,7,9));
SetPixel(hdc,740-f(t,435,435,435,435),670-f(t,0,0,19,19),RGB(255,7,9));
SetPixel(hdc,740-f(t,435,353,339,339),670-f(t,19,23,36,109),RGB(255,7,9));
SetPixel(hdc,740-f(t,339,339,339,339),670-f(t,109,108,620,620),RGB(255,7,9));
SetPixel(hdc,740-f(t,339,507,529,552),670-f(t,620,620,602,492),RGB(255,7,9));
SetPixel(hdc,740-f(t,552,552,576,576),670-f(t,492,492,492,492),RGB(255,7,9));
SetPixel(hdc,740-f(t,576,576,570,570),670-f(t,492,492,662,662),RGB(255,7,9));
SetPixel(hdc,740-f(t,570,570,6,6),670-f(t,662,662,662,662),RGB(255,7,9));
SetPixel(hdc,740-f(t,6,6,0,0),670-f(t,662,662,492,492),RGB(255,7,9));
SetPixel(hdc,740-f(t,0,0,24,24),670-f(t,492,492,492,492),RGB(255,7,9));
SetPixel(hdc,740-f(t,24,48,71,183),670-f(t,492,602,620,620),RGB(255,7,9));
SetPixel(hdc,740-f(t,183,183,237,237),670-f(t,620,620,620,620),RGB(255,7,9));
}
EndPaint(hWnd,&ps);
break;
caseWM_DESTROY:
PostQuitMessage(0);
break;
default:
returnDefWindowProc(hWnd,message,wParam,lParam);
}
return0;
}
//Mesagehandlerforaboutbox.
LRESULTCALLBACKAbout(HWNDhDlg,UINTmessage,WPARAMwParam,LPARAMlParam){
switch(message){
caseWM_INITDIALOG:
returnTRUE;
caseWM_COMMAND:
if(LOWORD(wParam)==IDOK||LOWORD(wParam)==IDCANCEL){
EndDialog(hDlg,LOWORD(wParam));
returnTRUE;
}
break;
}
returnFALSE;
}
T轮廓图如下:
5轮廓:
其他都一样,只要修改4.4的插入的代码为:
for(t=0.0;t<1.0;t=t+0.001)
{
SetPixel(hdc,f(t,149,149,149,368),680-f(t,597,597,597,597),RGB(255,0,0));SetPixel(hdc,f(t,345,368,365,368),680-f(t,597,597,599,606),RGB(255,0,0));
SetPixel(hdc,f(t,368,406,368,406),680-f(t,606,695,606,695),RGB(255,0,0));
SetPixel(hdc,f(t,406,397,406,397),680-f(t,695,702,695,702),RGB(255,0,0));
SetPixel(hdc,f(t,397,382,372,351),680-f(t,676,676,676,676),RGB(255,0,0));
SetPixel(hdc,f(t,351,351,351,142),680-f(t,676,676,676,676),RGB(255,0,0));
SetPixel(hdc,f(t,142,33,142,33),680-f(t,676,439,676,439),RGB(255,0,0));
SetPixel(hdc,f(t,33,32,32,32),680-f(t,439,438,436,434),RGB(255,0,0));
SetPixel(hdc,f(t,32,32,35,44),680-f(t,434,428,426,426),RGB(255,0,0));
SetPixel(hdc,f(t,44,74,109,149),680-f(t,426,426,420,408),RGB(255,0,0));
SetPixel(hdc,f(t,149,269,324,324),680-f(t,408,372,310,208),RGB(255,0,0));
SetPixel(hdc,f(t,324,324,324,185),680-f(t,208,180,37,37),RGB(255,0,0));
SetPixel(hdc,f(t,185,165,149,119),680-f(t,37,37,44,66),RGB(255,0,0));
SetPixel(hdc,f(t,119,86,65,42),680-f(t,66,90,99,99),RGB(255,0,0));
SetPixel(hdc,f(t,42,14,0,0),680-f(t,99,99,87,62),RGB(255,0,0));
SetPixel(hdc,f(t,0,0,65,121),680-f(t,62,24,0,0),RGB(255,0,0));
SetPixel(hdc,f(t,121,205,282,333),680-f(t,0,0,27,78),RGB(255,0,0));
SetPixel(hdc,f(t,333,378,399,399),680-f(t,78,123,180,256),RGB(255,0,0));
SetPixel(hdc,f(t,399,399,381,333),680-f(t,256,327,372,422),RGB(255,0,0));
SetPixel(hdc,f(t,333,288,232,112),680-f(t,422,468,491,512),RGB(255,0,0));
SetPixel(hdc,f(t,112,112,