计算机图形学-实验报告1-金刚石算法
绘制金刚石实验报告

附页实验内容、方法和步骤(1)新建一个MFC工程test(2)编写金刚石绘制函数(3)运行调试及结果截图:源代码:#include "stdafx.h"#include "test.h"#include "testDoc.h"#include "testView.h"#include <math.h>#define PI 3.1415926#define ROUND(a) int(a+0.5)#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif// CTestViewIMPLEMENT_DYNCREATE(CTestView, CView)BEGIN_MESSAGE_MAP(CTestView, CView)ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview) END_MESSAGE_MAP()// CTestView construction/destructionCTestView::CTestView(){}CTestView::~CTestView(){}BOOL CTestView::PreCreateWindow(CREATESTRUCT& cs)return CView::PreCreateWindow(cs);}// CTestView drawingvoid CTestView::OnDraw(CDC* pDC){CTestDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);CRect rect;GetClientRect(&rect);pDC->SetMapMode(MM_ANISOTROPIC);pDC->SetWindowExt(rect.Width(),rect.Height());pDC->SetViewportExt(rect.Width(),-rect.Height());pDC->SetViewportOrg(rect.Width()/2,rect.Height()/2);CPen NewPen,*pOldPen;NewPen.CreatePen(PS_SOLID,1,RGB(0,0,255));pOldPen=pDC->SelectObject(&NewPen);double thta;int n=20,r=150;CPoint p[20];thta=2*PI/n;for(int i=0;i<n;i++){p[i].x=(long)(r*cos(i*thta));p[i].y=(long)(r*sin(i*thta));}for(i=0;i<=n-2;i++){for(int j=i+1;j<=n-1;j++){pDC->MoveTo(ROUND(p[i].x),ROUND(p[i].y));pDC->LineTo(ROUND(p[j].x),ROUND(p[j].y));}}pDC->SelectObject(pOldPen);NewPen.DeleteObject();ReleaseDC(pDC);}// CTestView printingBOOL CTestView::OnPreparePrinting(CPrintInfo* pInfo){// default preparationreturn DoPreparePrinting(pInfo);}void CTestView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) {void CTestView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/){}// CTestView diagnostics#ifdef _DEBUGvoid CTestView::AssertValid() const{CView::AssertValid();}void CTestView::Dump(CDumpContext& dc) const{CView::Dump(dc);}CTestDoc* CTestView::GetDocument() // non-debug version is inline{ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CTestDoc)));return (CTestDoc*)m_pDocument;}#endif //_DEBUG// CTestView message handlers。
计算机图形学实验一报告

计算机图形学实验一报告————————————————————————————————作者:————————————————————————————————日期:ﻩ计算机科学与通信工程学院实验报告课程计算机图形学实验题目二维图形绘制学生姓名学号专业班级指导教师日期成绩评定表评价内容具体内容权重得分论证分析方案论证与综合分析的正确、合理性20%算法设计算法描述的正确性与可读性20%编码实现源代码正确性与可读性30%程序书写规范标识符定义规范,程序书写风格规范20%报告质量报告清晰,提交准时10%总分指导教师签名二维图形的绘制1.实验内容(1)绘制金刚石图案金刚石图案的成图规则是:把一个圆周等分成n份,然后每两点之间连线。
当n取奇数时,该图案可一笔连续绘成,即用MoveTo函数确定一个当前点,然后连续用LineTo函数连点成线。
请设计连线规则并编程实现。
(2)绘制魔术三角形绘制下图所示的魔术三角形图案,采用三种可明显区分的颜色填充。
(3)绘制递归圆应用递归的方法绘制如下所示的图案。
2.实验环境软硬件运行环境:Windows XP开发工具:visual studio 20083. 问题分析根据实验需求,需要在MFC环境中建立一个由“文件”、“绘图”和“帮助”这3个菜单项目组成的菜单,其中“文件”的子菜单为“退出”,完成退出应用程序的工作,“绘图”,的子菜单为“Diamond”,用于绘制金刚石图案等,“帮助”的子菜单为“关于”,用于显示开发人员信息;定义一个输人对话框类,提供个两个参数的输入界面。
最后在客户区输出图案。
1.金刚石图案:为把一个半径为300的圆,等分绘制金刚石图案;设计该算法为避免直线段的重复连接,需设计一个二重循环,代表起点索引号的外层整型变量i从i=0循环到i=n-2,代表终点索引号的内层整型变量j从j=i+1循环到j=n-1。
以(p[i].x,p[i].y)为起点,以(p[j].x,p[j].y)为终点依次连接各线段形成金刚石图案。
计算机图形学课程综合实习实习报告

计算机图形学课程综合实习实习报告1.实习目的(1)熟练掌握计算机图形学的基本原理和方法。
(2)熟练掌握计算机图形学的算法的程序实现,增强理论联系实际的能力(3)学习和掌握图形系统的设计和开发方法。
(4)学习使用VC++编写计算机图形学基础程序。
2.实习内容2.1程序结构说明2.1.1新建类的说明根据实习要求,对于二维算法的实现主要涉及到的图形有直线、圆形和多边形,因此新建三个类Cline,CCircle和CPolygon,其成员变量分别记录生成图形的参数,包括图形的几何参数(比如直线的端点坐标,圆的圆心坐标和半径)和图形显示效果的一些参数,比如线宽,使用何种方法绘制有一定线宽的直线,线的颜色等,类的成员函数主要作用是用于生成图形(主要是构建函数)、绘制图形(使用图形生成算法而不使用VC++自带的一些图形生成函数)和执行图形编辑操作。
同时由于添加一个对话框资源用于设置线宽和绘制时处理方法的一个对话框,生成对应的对话框处理类CSetWidthDialog,它从CDialog继承来,并添加相应的处理函数用于获得控件中相应的数据。
另外在裁剪时为了使程序的操作性更强,需要有一个临时的裁剪框,而使用MFC的函数或者是我已经写好的程序都没有办法达到理想的效果,因此我又添加一个新的类,叫做CCutRect专门用于处理图形裁剪时的操作。
2.1.2图形信息存储在文档类中添加三个动态文档类数组分别用于存储直线对象,圆对象和多边形对象,同时添加相应的函数,用于向数组中添加新的对象、获得数组长度和获得指定位置的对象,数组声明如下在绘制图形时,每绘制一个图形,就像相应的数组中添加相应的对象,在程序视图刷新时,输出所有图形。
2.1.3图形显示的优化如果在绘制图形及进行图形填充等操作时,直接在屏幕上输出结果,会因为整个I/O 操作拖慢程序的运行效率,具体反映就是图形填充操作时能够明显看出从上到下、逐行输出地过程,而在刷新视图时也可以看到类似的过程,在极端条件下(比如待填充区域很大或是非常复杂)会由于I/O操作不断刷新视图,导致程序永远进行填充,进入死循环。
计算机图形学实验报告实验1

签名:年月日
1.根据算法原理依次编写算法;
2.将实验数据输入编写好的程序;
3.将不同算法绘制的直线进行对比;
实验结果
Bresenham:
中点算法:
DDA算法:
实验总结
通过本次实验,让我了解了图形学一些基本知识,并利用编程实现了不同的算法生成一些直线,加深了对这些算法的理解和应用,通过实现这些算法生成直线,自己获得了对这门课程的兴趣,对以后的后续学习有着很大的帮助。
实验总结通过本次实验让我了解了图形学一些基本知识并利用编程实现了不同的算法生成一些直线加深了对这些算法的理解和应用通过实现这些算法生成直线自己获得了对这门课程的兴趣对以后的后续学习有着很大的帮助
贵州大学实验报告
学院:计算机科学与信息专业:计科班级:101
姓名
吕杨
学号
1008060040
同组成员
实验时间
(1).输入直线的起点坐标P0(x0.y0)和终点坐标P1(x1.y2)。
(2).定义直线当前点坐标x和y,定义中点偏差判别式d,定义直线斜率k,定义像素点颜色rgb。
(3).x=x0,y=y0,计算d=0.5-k,k=(y1-y0)/(x1-x0),rgb=RGB(0,0,255).
(4).绘制点(x,y),判断点d的符号。若d<0,则(x,y)更新为(x+1,y+1),d更新为d+1-k;否则(x,y)更新为(x+1,y),d更新为d-k。
if(abs(k)<1)
{
for(x=x0;x<=x1;x++)
{
pDC->SetPixel (x,int(y+0.5),c);
《计算机图形学》实验报告

实验报告模板《计算机图形学》实验报告一、实验目的及要求1.实习三维图形的坐标系之间的变换;2.三维图形几何变换;3.掌握三维图形的坐标系之间的变换算法及三维图形几何变换的原理和实现;4.实现二维图形的基本变换(平移、旋转、缩放、错切、对称、复合等);5.实现三维图形的基本变换(平移、旋转、缩放、复合等);二、理论基础在齐次坐标理论下,二维图形几何变换矩阵可用下式表示:⎪⎪⎪⎭⎫⎝⎛===ifchebgdaTnkxx kk2,1,0,)(ϕ平移变换:[x* y* 1] =[x y 1] *0000001ts⎛⎫⎪⎪⎪⎝⎭=[t*x s*y 1]比例变换:[x* y* 1]=[x y 1] *1000101m n⎛⎫⎪⎪⎪⎝⎭=[m+x n+y 1]旋转变换:在平面上的二维图形饶原点逆时针旋转Ө角,变换矩阵为[x* y* 1]=[x y 1] *cos sin0sin cos0001θθθθ⎛⎫⎪- ⎪⎪⎝⎭= [x*cosө-y*sinө]复合变换:以上各种变换矩阵都是以原点为参照点,当以任意参照点进行变换的时候,我们就要用到复合变换矩阵。
三维变换类似于二维,在画图时,把三维坐标转换为二维即可。
三、算法设计与分析二维变换:#define dx 50#define dy 100void CCGWithVCView::OnTransScale() //平移(50,100){// TODO: Add your command handler code here// AfxMessageBox(_T("Please Insert The Move Change Code!")) ;int m[4][2]={{100,50},{50,100},{150,100},{100,50}};int i;int a[2],b[2];CDC * pDC = GetDC();for(i=0;i<3;i++){a[0]=m[i][0];a[1]=m[i][1];b[0]=m[i+1][0];b[1]=m[i+1][1];DDALine(a,b, RGB(0, 200, 255), pDC);}for(i=0;i<3;i++){a[0]=m[i][0]+dx;a[1]=m[i][1]+dy;b[0]=m[i+1][0]+dx;b[1]=m[i+1][1]+dy;DDALine(a,b, RGB(0, 200, 255), pDC);}}#define h 0.1745#include<math.h>void CCGWithVCView::OnTransRotate() //旋转{// TODO: Add your command handler code here// AfxMessageBox(_T("Please Insert The Rotate Change Code!")) ;int m[4][2]={{100,50},{50,100},{150,100},{100,50}};int i;int a[2],b[2];CDC * pDC = GetDC();for(i=0;i<3;i++){a[0]=m[i][0];a[1]=m[i][1];b[0]=m[i+1][0];b[1]=m[i+1][1];DDALine(a,b, RGB(0, 200, 255), pDC);}for(i=0;i<3;i++){a[0]=m[i][0]*cos(h)-m[i][1]*sin(h);a[1]=m[i][1]*cos(h)+m[i][0]*sin(h);b[0]=m[i+1][0]*cos(h)-m[i+1][1]*sin(h);b[1]=m[i+1][1]*cos(h)+m[i+1][0]*sin(h);DDALine(a,b, RGB(0, 200, 255), pDC);}}#define k 2;#define f 2.5void CCGWithVCView::OnTransMove() //缩放{// TODO: Add your command handler code here//AfxMessageBox(_T("Please Insert The Scale Change Code!")) ;int m[4][2]={{100,50},{50,100},{150,100},{100,50}};int i;int a[2],b[2];CDC * pDC = GetDC();for(i=0;i<3;i++){a[0]=m[i][0];a[1]=m[i][1];b[0]=m[i+1][0];b[1]=m[i+1][1];DDALine(a,b, RGB(0, 200, 255), pDC);}for(i=0;i<3;i++){a[0]=m[i][0]*k;a[1]=m[i][1]*f;b[0]=m[i+1][0]*k;b[1]=m[i+1][1]*f;DDALine(a,b, RGB(0, 200, 255), pDC);}}#define n 2#define d 0void CCGWithVCView::OnTransOther(){// TODO: Add your command handler code here//AfxMessageBox(_T("Please Insert The Other Change Code!")) ;int m[4][2]={{100,50},{50,100},{150,100},{100,50}};int i;int a[2],b[2];CDC * pDC = GetDC();for(i=0;i<3;i++){a[0]=m[i][0];a[1]=m[i][1];b[0]=m[i+1][0];b[1]=m[i+1][1];DDALine(a,b, RGB(0, 200, 255), pDC);}for(i=0;i<3;i++){a[0]=m[i][0]+n*m[i][1];a[1]=m[i][1]+d*m[i][0];b[0]=m[i+1][0]+n*m[i+1][1];b[1]=m[i+1][1]+d*m[i+1][0];DDALine(a,b, RGB(0, 200, 255), pDC);}}三维变换:#include<math.h>#define dx 100#define dy 100#define dz 0void CCGWithVCView::OnTransScale() //平移(50,100){// TODO: Add your command handler code here// AfxMessageBox(_T("Please Insert The Move Change Code!")) ;int i;int p2d[6][2];int p3d[6][3]={{400,300,0},{300,400,0},{300,300,10},{275,300,0},{400,300,0},{300,300,10}};for( i=0;i<6;i++){p2d[i][0]=p3d[i][1]-p3d[i][0]/sqrt(2);p2d[i][1]=p3d[i][2]+p3d[i][0]/sqrt(2);}int a[2],b[2];CDC * pDC = GetDC();for(i=0;i<5;i++){a[0]=p2d[i][0];a[1]=p2d[i][1];b[0]=p2d[i+1][0];b[1]=p2d[i+1][1];DDALine(a,b, RGB(0, 200, 255), pDC);}for( i=0;i<6;i++){p2d[i][0]=p3d[i][1]+dy-p3d[i][0]+dx/sqrt(2);p2d[i][1]=p3d[i][2]+dz+p3d[i][0]+dx/sqrt(2);}for(i=0;i<5;i++){a[0]=p2d[i][0];a[1]=p2d[i][1];b[0]=p2d[i+1][0];b[1]=p2d[i+1][1];DDALine(a,b, RGB(0, 0, 255), pDC);}}#define k 0.1745void CCGWithVCView::OnTransRotate() //旋转{// TODO: Add your command handler code here// AfxMessageBox(_T("Please Insert The Rotate Change Code!")) ;int i;int p2d[6][2];int p3d[6][3]={{400,300,0},{300,400,0},{300,300,10},{275,300,0},{400,300,0},{300,300,10}};for( i=0;i<6;i++){p2d[i][0]=p3d[i][1]-p3d[i][0]/sqrt(2);p2d[i][1]=p3d[i][2]+p3d[i][0]/sqrt(2);}int a[2],b[2];CDC * pDC = GetDC();for(i=0;i<5;i++){a[0]=p2d[i][0];a[1]=p2d[i][1];b[0]=p2d[i+1][0];b[1]=p2d[i+1][1];DDALine(a,b, RGB(0, 200, 255), pDC);}for( i=0;i<6;i++){p2d[i][0]=p3d[i][1]*cos(k)-p3d[i][2]*sin(k)-p3d[i][0]/sqrt(2);p2d[i][1]=p3d[i][2]*cos(k)+p3d[i][1]*sin(k)+p3d[i][0]/sqrt(2);}for(i=0;i<5;i++){a[0]=p2d[i][0];a[1]=p2d[i][1];b[0]=p2d[i+1][0];b[1]=p2d[i+1][1];DDALine(a,b, RGB(0, 0, 255), pDC);}}四、程序调试及结果的分析二维:三维:五、实验心得及建议在实验过程中,尽管过程中任由许多不会的地方,而且有待于今后的提高和改进,但我加深了对书本上知识的理解与掌握,同时也学到了很多书本上没有东西,并积累了一些宝贵的经验,这对我以后的学习与工作是不无裨益的。
实验1 金刚石图案算法

实验1 金刚石图案算法一、实验目的在圆的基础上绘制金刚石图案。
金刚石图案是一个二维图案,仅使用二维坐标(x,y)就可以绘制:利用数学函数sin()及cos()函数计算点坐标,利用MoveTo()及LineTo ()函数将顶点连接起来,验证算法的正确性,并修改程序,加深对VC++绘图的理解。
二、实验任务将半径为r的圆周n等份,然后用直线将各等分点两两相连,形成的图案称为“金刚石”图案,并编程实现。
三、实验内容1.建立工程----“TestDiamond”。
2. 编写Diamond()函数:(1)指定n、及r的值;(2)根据等分点数,计算金刚石图案的等分角“theta”,theta=2*PI/n;(3)将等分点坐标存储在数组中;(4)设计二重循环,将各等分点两两相连。
3.OnDraw()中调用Diamond()函数。
4.注意:(1)用到sin()等数学函数,所以在CtestDiamondView.cpp中添加“#include "math.h"”语句;(2)为了简单起见(没有使用面向对象的方法定义“点”类,没有使用动态内存分配),初始化存储点坐标的数组x[]和y[]为固定大小,即x[i]和y[i]共同表示第i个点的x和y坐标。
5.代码(1)Diamond()函数void CTestDiamondView::Diamond(CDC *pDC, int n, double r){//n为等分点的个数,r为圆的半径double Theta;//thta为圆的等分角double PI=3.1415926;double x[40];double y[40];int MaxX=700;int MaxY=700;//圆心设定为(350 ,350)Theta=2*PI/n;for(int i=0;i<n;i++) //等分圆{x[i]=r*cos(i*Theta)+MaxX/2;y[i]=r*sin(i*Theta)+MaxY/2;}for(i=0;i<=n-2;i++) //二次循环,点点连接{for(int j=i+1;j<=n-1;j++){pDC->MoveTo(int(x[i]),int(y[i]));pDC->LineTo(int(x[j]),int(y[j]));}}}(2)OnDraw()函数void CTestDiamondView::OnDraw(CDC* pDC){CTestDiamondDoc* pDoc = GetDocument();ASSERT_V ALID(pDoc);// TODO: add draw code for native data hereCPen PenBlue(PS_SOLID,1,RGB(0,0,255));//定义蓝色笔pDC->SelectObject(&PenBlue);Diamond(pDC,31, 300 );}。
计算机图形学实验1报告

设计和实现一个图形函数库一、实验要求设计和实现一个图形函数库,具有绘制直线段、任意圆弧、椭圆弧、多边形区域的阴影填充和颜色填充等功能。
(仅调用画点函数)Windows API: setpixel(hdc,x,y,color)二、实验平台编程环境:Visual Studio 2008编程语言:C#操作系统:Windows 7三、实验目的在理解画直线段,圆弧,椭圆,多边形的画法,以及阴影填充和颜色填充算法的基础上,编程实现出一个简单的画图工具,加深对个算法的理解。
四、算法基本原理1、画直线段(1)算法思想本程序采用Bresenham直线算法,基本思想为:(以斜率在0~1之间的直线段为例)这种情况下, 选择X方向为计长方向,即增量dx=1。
如图3.2所示,设P i (x i,y i)是已选定的离直线最近的像素, 现在要决定P i+1是T还是S。
显然, 若d<0.5, 则S比较靠近直线, 应选S;若d>=0.5, 则应选T。
(m= △y/△x)令e=d-0.5(初值为-0.5), 即有:e <0时, 选P i+1(x i+1, y i), 更新e=e+m;e >=0时, 选P i+1(x i+1, y i+1), 更新e=e+m-1;2、画圆弧(1)算法思想本程序采用Bresenham圆弧算法,基本思想为:与Bresenham直线生成算法一样, 其基本方法是从一个起点出发, 利用判别式选择下一个显示点。
判别式的值通过简单计算获得, 其符号用作判断。
此算法在每一步都选择一个离开理想圆周最近的点P i(x i, y i), 使其误差项|D(P i)|=|x i2+y i2-R2|在每一步都是极小值。
设P i-1(x i-1, y i-1)已被选定为最靠近圆弧的点,下一步x=x i-1+1时, 要决定T还是S更接近理想的圆弧,令D(S)=(x i-1+1)2+ (y i-1)2 -R2D(T)=(x i-1+1)2+ (y i-1-1)2-R2显然, |D(S)|>=|D(T)|时, 应该取T点; 反之则取S点3、画椭圆弧(1)算法思想椭圆生成算法与圆形生成算法类似,都是先生成八分之一圆弧,然后根据对称原则生成图形,所不同的是椭圆有长轴和短轴之分,故需要提前求出45°方向椭圆焦点的坐标。
计算机图形学实习报告

计算机图形学实习报告计算机图形学课程设计实验报告姓名:学号:专业:地理信息系统⼀、课程设计⽬的在掌握图形学的基本原理、算法和实现技术基础上,通过编程实践学会基本的图形软件开发技术。
⼆、课程设计内容仿照Windows的附件程序“画图”, ⽤C++语⾔编制⼀个具有交互式绘制和编辑多种图元功能的程序“Mini-Painter”,实现以下功能对应的设计内容:(1) 能够以交互⽅式在图形绘制区绘制点、直线(折线)、圆(椭圆)、圆弧、多边形、Beizer曲线、封闭区域填充、⽂字等基本图元;(2) 设置线条的颜⾊、线型和线条宽度,对绘制的图元进⾏线条和填充属性的修改;(3) ⽀持图元的点选和基于橡⽪筋技术的圈选;(4) 对选中的图元进⾏平移、缩放、旋转和对称等变换;三、实验步骤1.新建MFC应⽤程序1.1新建⼯程。
运⾏VC++6.0,新建⼀个MFC AppWizard[exe]⼯程,并命名为“0710070118”,选择保存路径,确定。
1.2选择应⽤程序的类型,选择“单⽂档”,则可以通过菜单打开对话框2.建⽴单⽂档应⽤程序,在其中调⽤对话框2.1 查看⼯程资源在单击完成之后,即建⽴了⼀个⼯程,在⼯程的左侧资源视图可以看到MFC向导为该程序提供的⼀些资源。
分别如下所⽰:2.2插⼊对话框资源想在⽂档应⽤程序中,通过单击菜单来打开⼀个对话框,⾸先要建⽴该对话框的资源。
右击“resources ”中的“dialog ”项,在弹出的菜单中选择“插⼊”,打开插⼊菜单对话框,如图所⽰:对话框资源插⼊后,可修改⼀些属性,⽐如标题、字体等等。
在对话框空⽩处右击,选择属性就可打开资源的属性对话框,按照要求设置对话框的属性。
2.3布置对话框界⾯对话框资源插⼊后,即可在该对话框上布置各种需要的控件,并可通过编排菜单的各种命令或“对话”⼯具条调整各控件的⼤⼩,位置,对齐⽅式等,还可以单击对话⼯具条上第⼀个按钮“测试”按钮,看到对话框运⾏时的界⾯。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程名称
计算机图形学
班级
班级学号
姓名
实验日期
成绩
实验题目
金刚石图案算法
一、实验目的:
使用mfc的基本绘图函数绘制蓝色直线线段构ห้องสมุดไป่ตู้的金刚石图案。
二、实验内容:
将半径为r的圆周n等份,然后用直线段将每一个等分点和其他所有得分点连接,形成的图案,使用对话框读入等分点的个数与圆的半径,以屏幕客户区中心为圆心,使用mfc的基本绘图函数绘制蓝色直线段构成的金刚石图案。
四、实验结果及分析:
实验地点
软件实验室
指导教师
李丽亚
三、实验步骤:
(1)读入圆的等分点个数n与圆的半径r。
(2)根据等分点个数计算金刚石图案的等分角θ=2π/n。
(3)计算金刚石图案的起始角α=π/2-θ。α是用于调整金刚石图案的起始位置。
(4)奖圆等分后的顶点坐标存储于数组p中。
(5)设计一个二重循环,代表起点的外层整形变量i从i=0循环到i=n-2,代表终点的内层整形变量j从j=i+1循环到j=n-1.以p[j]为终点连接各个线断。