资源简介
直线、圆、多边形
这是针对09年所写计算机图形学源码重构后的版本。新版本在实现用多种算法生成直线、圆、多边形等图形图像的同时,使用了双缓存绘图防止图像闪烁,并使用自定义结构扫描线存储所绘连块图形区域提高了二次绘图效率。
同时将所有图形图像封装成类,便于图形的重绘以及旋转、平移、缩放、对称变换等几何操作。
这是真正意义上实现了二维图层操作,而不是一个演示性的算法。
光照实验与消隐借用已有代码,因此代码变量命名风格与之前的不统一。
代码片段和文件信息
#include “StdAfx.h“
#include “shape.h“
#include “Math.h“
#ifndef AFX_CIRCLE_kHaXxGHcA3eTghZD5EHQF3FyVkZVwmcZNDbv5EUvsCMwMDOPZGcHlnR_LP10VelGTFBsb3ZlTEc_0722_03_21_141320211_
#define AFX_CIRCLE_kHaXxGHcA3eTghZD5EHQF3FyVkZVwmcZNDbv5EUvsCMwMDOPZGcHlnR_LP10VelGTFBsb3ZlTEc_0722_03_21_141320211_
IMPLEMENT_SERIAL(CCircleCShape1)
//构造函数初始化各类参数
CCircle::CCircle(CPoint pCenter CPoint pEdge int Width int styleBOOL bFill COLORREF pColorCOLORREF fillColor)
{
m_pCenter=pCenter;m_pEdge=pEdge;m_pWidth=Width;m_nstyle=style;m_pColor=pColor;m_FillColor=fillColor;
m_bIsSelected = FALSE;
m_bIsAutoFilled = bFill;
}
//序列化
void CCircle::Serialize(CArchive& ar)
{
if(ar.IsStoring())
ar<yle;
else
ar>>m_pCenter.x>>m_pCenter.y>>m_pEdge.x>>m_pEdge.y>>m_nstyle;
CShape::Serialize(ar);
}
void CCircle::Drawing(CDC *pDC)
{
COLORREF colorPenSave = m_pColor;
COLORREF colorFillSave = m_FillColor;
if (m_bIsSelected)
{
m_pColor = RGB(200200200); //显示选中
m_FillColor = RGB(200200200); //显示选中
}
if(m_bIsAutoFilled)
FillCirCle(pDC);
switch (m_nstyle)
{
case MID_CIRCLE:MIDCircle(pDC);break;
case PLUSMINUS_CIRCLE:PlusMinusCircle(pDC);break;
case BRESENHAM_CIRCLE:BresenHamCircle(pDC);break;
default:break;
}
m_pColor = colorPenSave;
m_FillColor = colorFillSave;
}
void CCircle::SavePoint()
{
m_pCenterSave =m_pCenter;
m_pEdgeSave = m_pEdge;
}
CRect CCircle::GetBoundaryRect()
{
CRect rect;
int r=(int)sqrt((m_pCenter.x-m_pEdge.x)*(m_pCenter.x-m_pEdge.x)
+(m_pCenter.y-m_pEdge.y)*(m_pCenter.y-m_pEdge.y));
rect.left = m_pCenter.x - r;
rect.right= m_pCenter.x + r;
rect.top= m_pCenter.y - r;
rect.bottom= m_pCenter.y + r;
return rect;
}
void CCircle::MIDCircle(CDC *pDC)
{
int rxdydeltaxdeltayx0y0iiiii;
CPen PenNew(PS_SOLID1m_pColor) * pOldPen;//设置画笔
CBrush Brh(m_pColor) *pOldBrh; //设置笔刷
pDC->SetROP2(R2_COPYPEN); //绘图方法为直接画
pOldPen = pDC->Selectobject(&PenNew);
pOldBrh = pDC->Selectobject(&Brh);
r=(int)sqrt((m_pCenter.x-m_pEdge.x)*(m_pCenter.x-m_pEdge.x)
+(m_pCenter.y-m_pEdge.y)*(m_pCenter.y-m_pEdge.y));
x=0;y=r;
deltax=3;deltay=2-r-r;d=1-r;x0=m_pCenter.x;y0=m_pCenter.y;
ii=m_pWidth/2;iii=(m_pWidth+1)/2;
while(x<=y)
{
if(m_pWidth==1) //线宽为1时候用点划
{
pDC->SetPixel(x+x0y+y0m_pColor);
pDC->SetPixel(-x+x0y+y0m_pColor);
pDC->SetPixel(x+x0-y+y0m_pColor);
pDC->SetPixel(-x+x0-y+y0m_pColor);
pDC->SetPixel(y+x0x+y0m_pColor);
pDC->SetPixel(-y+x0x+y0m_pColor);
pDC->SetPixel(y+x0-x+y0m_pColor);
pDC->SetPixel(-y+x0-x+y0m_pColor);
}
else
if(m_pWidth!=1) //线宽不为1时候用圆画
{
pDC->Ellipse(x+x0-iiy+y0-iix+x0+iiiy+y0+iii);
pDC->Ellipse(-x+x0-iiy+y0-ii-x+x0+iiiy+y0+iii);
pDC->Ellipse(x+x0-ii-y+y0-iix+x0+iii-y+y0+iii);
pDC->Ellipse(-x+x0-ii-y+y0-ii-x+x0+iii-y+y0+iii);
pDC->Ellipse(y+x0-ii
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 7298 2011-07-20 14:01 ComputerGraphic\Circle.cpp
文件 6825 2011-07-20 14:01 ComputerGraphic\CircleSetDlg.cpp
文件 1853 2011-07-20 14:01 ComputerGraphic\CircleSetDlg.h
文件 4371 2011-07-20 14:01 ComputerGraphic\ComputerGraphic.cpp
文件 6521 2011-07-20 14:01 ComputerGraphic\ComputerGraphic.dsp
文件 555 2011-07-20 14:01 ComputerGraphic\ComputerGraphic.dsw
文件 1449 2011-07-20 14:01 ComputerGraphic\ComputerGraphic.h
文件 123904 2011-07-20 14:47 ComputerGraphic\ComputerGraphic.ncb
文件 53760 2011-07-20 14:47 ComputerGraphic\ComputerGraphic.opt
文件 3246 2011-07-20 14:14 ComputerGraphic\ComputerGraphic.plg
文件 22039 2011-07-20 14:01 ComputerGraphic\ComputerGraphic.rc
文件 2296 2011-07-20 14:01 ComputerGraphic\ComputerGraphicDoc.cpp
文件 1623 2011-07-20 14:01 ComputerGraphic\ComputerGraphicDoc.h
文件 56135 2011-07-20 14:01 ComputerGraphic\ComputerGraphicView.cpp
文件 6032 2011-07-20 14:01 ComputerGraphic\ComputerGraphicView.h
文件 7602 2011-07-20 14:01 ComputerGraphic\DrawDlg.cpp
文件 1756 2011-07-20 14:01 ComputerGraphic\DrawDlg.h
文件 1878 2011-07-20 14:01 ComputerGraphic\EditEx.cpp
文件 1304 2011-07-20 14:01 ComputerGraphic\EditEx.h
文件 10806 2011-07-20 14:01 ComputerGraphic\line.cpp
文件 4229 2011-07-20 14:01 ComputerGraphic\LineSetDlg.cpp
文件 1673 2011-07-20 14:01 ComputerGraphic\LineSetDlg.h
文件 3203 2011-07-20 14:01 ComputerGraphic\MainFrm.cpp
文件 1551 2011-07-20 14:01 ComputerGraphic\MainFrm.h
文件 1232 2011-07-20 14:01 ComputerGraphic\Matirx.h
文件 2579 2011-07-20 14:01 ComputerGraphic\MyFace.h
文件 5028 2011-07-20 14:01 ComputerGraphic\Polygon.cpp
文件 4535 2011-07-20 14:01 ComputerGraphic\ReadMe.txt
文件 766 2011-07-09 17:34 ComputerGraphic\res\3dsmove.cur
文件 3262 2011-07-10 04:32 ComputerGraphic\res\4.cur
............此处省略26个文件信息
相关资源
- 计算机图形学源码DDA直线、中点直线
- 计算机图形学上机作业
- 计算机图形学大作业之图形绘制变换
- 扫描线种子填充算法代码
- 计算机图形学裁剪算法
- opengl雪花代码
- 东南大学计算机图形学实验三 橡皮筋
- 东南大学计算机图形学实验二 简单
- 计算机图形学实验之区域填充实验报
- 2017-2018计算机图形学A卷附(答案)
- 计算机图形学教程课后习题答案
- 计算机图形学第三版孙家广课后答案
- 计算机图形学__Bresenham完整算法_画直
- 计算机图形学四面体几何变换.doc
- 西南交通大学计算机图形学实验二,
- 交互式计算机图形学-基于OpenGL的自顶
- 计算机图形学实现多边形裁剪
- 计算机图形学画花瓣曲线
- 计算机图形学-基于weiler-atherton算法的
- 山东大学2018计算机图形学考试
- 反走样算法-计算机图形学
- 计算机图形学 边界定义的8连通区域
- 计算机图形学,内含DDA画直线,画圆
- 计算机图形学旋转和投影
- 计算机图形学自行车实验
- 计算机图形学实验六真实感图形程序
- 计算机图形学实验五三维图形变换程
- B样条曲线绘制图案--一个计算机图形
- 计算机图形学简明教程课后习题答案
- 安徽大学计算机图形学考试题集.doc
评论
共有 条评论