基本几何对象(1)——Geometry

定义基础的Geometry类,作为所有几何类的基类,方便用Geometry指针进行统一操作:长度、空判别、清空、克隆、变换、旋转、平移、缩放、凸包、外接AABB矩形、最小外界矩形。

Geometry定义了type()虚函数,返回一个枚举值,表示Geometry指针所指向对象的实际类型,下面给出枚举值的定义。

enum Type {GEOMETRY, POINT, POLYLINE, AABBRECT, POLYGON, TRIANGLE, CIRCLE, LINE, BEZIER};

另外,在计算时还依赖如圆周率这样的常数,下面列出所有用到的常数。

const static double PI = 3.14159265358979323846;
const static double EPSILON = 1e-10;

下面给出Geometry的声明。

class Geometry
{
    public:
        Geometry() {};

        Geometry(const Geometry &geo);

        virtual ~Geometry() {};

        Geometry &operator=(const Geometry &geo);

        virtual const Type type() const;

        virtual const double length() const;

        virtual const bool empty() const;

        virtual void clear();

        virtual Geo::Geometry *clone() const;

        virtual void transform(const double a, const double b, const double c, const double d, const double e, const double f);

        virtual void transform(const double mat[6]);

        virtual void translate(const double tx, const double ty);

        virtual void rotate(const double x, const double y, const double rad); // 弧度制

        virtual void scale(const double x, const double y, const double k);

        // 凸包
        virtual Polygon convex_hull() const;

        // 外接AABB矩形
        virtual AABBRect bounding_rect() const;

        // 最小外接矩形
        virtual Polygon mini_bounding_rect() const;
};

下面给出Geometry的实现。

Geometry::Geometry(const Geometry &geo) {}

Geometry &Geometry::operator=(const Geometry &geo)
{
    if (this != &geo)
    {
        shape_fixed = geo.shape_fixed;
        is_selected = geo.is_selected;
        point_index = geo.point_index;
        point_count = geo.point_count;
    }
    return *this;
}

const Type Geometry::type() const
{
    return Type::GEOMETRY;
}

const double Geometry::length() const
{
    return 0;
}

const bool Geometry::empty() const
{
    return true;
}

void Geometry::clear(){}

Geometry *Geometry::clone() const
{
    return new Geometry(*this);
}

void Geometry::transform(const double a, const double b, const double c, const double d, const double e, const double f){}

void Geometry::transform(const double mat[6]){}

void Geometry::translate(const double tx, const double ty){}

void Geometry::rotate(const double x, const double y, const double rad){}

void Geometry::scale(const double x, const double y, const double k){}

Polygon Geometry::convex_hull() const { return Polygon(); }

AABBRect Geometry::bounding_rect() const { return AABBRect(); }

Polygon Geometry::mini_bounding_rect() const { return Polygon(); }
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值