毕业论文论文范文课程设计实践报告法律论文英语论文教学论文医学论文农学论文艺术论文行政论文管理论文计算机安全
您现在的位置: 毕业论文 >> 论文 >> 正文

C++简单几何图形的识别和编辑系统设计+PPT演示 第5页

更新时间:2010-2-24:  来源:毕业论文
C++简单几何图形的识别和编辑系统设计+PPT演示 第5页
第三章 直线和圆的识别和编辑的实现
第一节 系统的层次结构的图示
第二节 系统数据结构及类的设计
1. 主要类的层次结构
1.1  图形处理类:
1.2      识别用类:
2. 图形基类(CShape)
2.1  描述
图形基类,提供所有图形的标准属性和方法。其他图形类(直线、圆)等都是该类的子类,继承其所有的public属性和方法,对其中的虚方法(virtual)进行重定义和实现。
该类为虚类,其成员函数主要为虚函数,为其所有子类提供统一的接口,但是没有实现。其他模块对图形进行操作时,除非生成新的实例(Instance),都无须知道所操作的是哪个具体的图形,而统一使用Cshape类型,为程序的实现、扩充和文护提供很大方便。
2.2  实现
class CShape {
  public:
/* 属性定义 */
//前景色(由于时间等的限制,本系统暂时只定义该图形的属性,其
//        他如:填充色,线条型,填充型等可扩充)
    TColor color;
    /* 编辑用属性 */
    //编辑时标志该图形是否被选择
    bool isSelected;
    //编辑操作所选中的点
    TPoint * editP
    /* 识别用属性 */
    // 识别的效果描述,值越小说明识别效果越好
    //     最小二乘法的平均误差;
//     霍夫变换:1 - 参数空间中该图形的值/最大值
    double chance;
    //图形上点的数量
    int pointCount;
    /* 成员函数定义 */
    /* 显示和描述用方法 */
    // 显示图形:在指定的位图上显示图形
    virtual void draw(Graphics::TBitmap * argDest);
    // 描述图形:作为TtreeView的节点(主窗体使用)
    virtual void discript(int index, TTreeView * tree);
    // 描述图形:返回描述图形的字符串
    virtual String discript();
    /* 识别用 */
    // 比较两个图形,如果是同一个图形,返回True,否则False。
    //     直线上的两个线段;圆上面的两个圆弧
    virtual bool similarWith(CShape * argShape);
    // 合并两个图形
    //     经过判断为相同的图形进行合并,返回True;否则返回False。
    virtual bool mergeWith(CShape * argShape);
    // 判断图形存在的可能性(利用具体图形的几何规则)
    virtual bool checkPossible();
    /* 编辑用 */
    // 判断是否点击该图形,若选中则当前编辑的图形改为当前图形
    virtual bool isClickOnShape(int x, int y);
    // 取得鼠标形状:鼠标移动到选中图形的可操作点上时,显示为编辑形状
    virtual TCursor getCursor(int x, int y);
    // 更新图形:将编辑点移动到(x, y)点。更新成功返回True,否则False。
    virtual bool update(int x, int y);
};
3. 图形类(CLine、CCircle)
3.1  描述
图形类是几何图形的具体实现,实现对应几何图形的描述和相关操作。图形类有共同的父类CShape,对父类中定义的虚方法根据本几何图形的特征进行实现。
根据要求,本系统中实现了直线(CLine)和圆(CCircle)两个图形类。其他简单的几何图形如椭圆、矩形等也可以类似的方法实现,作为本系统的一个扩充。
本系统中,直线类采用直观的 的形式来描述直线(既避免点斜式不能描述竖直直线,也避免极坐标方程转换的问题)。因为成比例的两组 和 表示同一条直线,所以规定,如果B参数不为0,则 ,否则A必定不为0,则 。由于要识别图像中的线段,所以增加两个端点进行限制。
直线类有三个点可以编辑:1)两个端点,选中一个端点并移动,是以另一端点为轴进行旋转;2)线段的中点,选中中点并移动,是平移整个直线。
圆类采用 的形式描述(其中 为圆心,R为半径),直观方便。圆上有两个点支持编辑操作:1)圆心,选中圆心并移动,是平移整个圆;2)圆上的一个点,选中该点并移动,是改变圆的半径,圆心不变。
3.2  实现
 直线类(CLine)
class CLine: public CShape {
  public:
    /* 初始化 */
    CLine(double argA, double argB, double argC);
    /* 直线的属性 */
    // 线段的两个端点
    TPoint *startP, *endP;
    // 直线方程的参数:A,B,C
    double A, B, C;
/* 对父类虚方法的实现 */
// 在目标位图上画出直线(本系统中的实现为画线段)
    void draw(Graphics::TBitmap * argDest);
    // 在TTreeView中描述
    void discript(int index, TTreeView * tree);
    // 返回描述用字符串
    String discript();
    //  判断该直线是否与指定图形相同
    //      将指定图形强制转化为CLine类型,比较其参数A, B, C,
//      若小于指定阈值,则返回Ture,否则返回False。
    bool similarWith(CShape * argShape);
    // 合并同一直线上的两个线段
    //     若目标图形与该图形属同一直线,进行合并,返回True;
//     否则返回False。
    void mergeWith(CShape * argShape);
    // 判断是否选择该直线进行编辑。
    //     判断指定点(x, y)到该直线的距离,
//     如果小于指定阈值则返回True,否则False。
    bool isClickOnShape(int x, int y);
    // 取得鼠标形状。
    //     端点时返回45度,135度的双向箭头形状表示旋转;
//     中点时返回垂直的四个方向箭头的形状表示移动
    TCursor getCursor(int x, int y);
    // 更新直线
    bool update(int x, int y);
};
 圆类(CCircle)
class CCircle: public CShape {
  public:
    /* 初始化 */
    CCircle(int argX, int argY, int argR);
    /* 圆的属性 */
    // 圆心
    TPoint * centerP;
    // 半径
    int R;
/* 对父类虚方法的实现 */
// 在目标位图上画出圆
    void draw(Graphics::TBitmap * argDest);
    // 在TTreeView中描述
    void discript(int index, TTreeView * tree);
    // 返回描述用字符串

上一页  [1] [2] [3] [4] [5] [6] [7] [8] 下一页

C++简单几何图形的识别和编辑系统设计+PPT演示 第5页下载如图片无法显示或论文不完整,请联系qq752018766
设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©751com.cn 辣文论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。