C++ Hình Họa Không Gian: C++ Point2D

 

Chào mừng các bạn trở lại chủ đề c++ hình họa không gian.

Bài hôm nay chúng ta sẽ thực hành xây dựng lớp point2d.

Đối tượng point2d rất cơ bản và sử dụng phổ biến trong lập trình đồ họa, hình học…

C++ Point 2d

I. Lý thuyết cơ bản.

1. Tạo một class đặt tên class là:  TPoint2D.

Tương tự như bài vector, chúng ta cũng tạo một class mới có tên là TPoint2D

Thêm header guard vào cho lớp.

Gọi header của lớp vector2d, vì cần dùng đến khi tính toán vector từ 2 điểm.

2. Một điểm trong không gian có những tính chất gì.

a. Điểm cũng có 2 tọa x,y với quyền truy cập cho phép là public.

b. các hàm xử lý cơ bản, và các phép toán tử cơ bản

Phép gán 2 point,

phép so sánh bằng.

Hàm tính toán vector dựa trên phép trừ 2 điểm

VectorAB = B – A

Hàm tính một điểm khi biết một điểm và một vector cho trước.

Hàm tính khoảng cách 2 điểm.

Hàm tìm ra trung điểm của 2 điểm.

Hoặc các xử lý khác do các bạn nghĩ và sáng tạo ra

II. Code thực thi.

1. File header.

#ifndef TPoint2D_H_
#define TPoint2D_H_
#include <math.h>
#include "TVector2D.h"

class TPoint2D
{
public:
    TPoint2D();
    TPoint2D(float x, float y);
    TPoint2D(float v1[2]);
    TPoint2D(const TPoint2D& v);
    ~TPoint2D();

public:
    TPoint2D GetPointDis(const TVector2D& v, float d);
    TPoint2D GetMidPoint(const TPoint2D& p);
    float GetDistance(const TPoint2D& p);
public:
    float x_;
    float y_;

    const TPoint2D &operator = (const TPoint2D &v)
    {
        x_ = v.x_;
        y_ = v.y_;
        return *this;
    }

    const bool &operator == (TPoint2D &v)
    {
        if (fabs(x_ - v.x_) < TEXP_4 &&
            fabs(y_ - v.y_) < TEXP_4)
        {
            return true;
        }
        return false;
    }


    const TVector2D &operator - (TPoint2D &v)
    {
        TVector2D vRet;
        vRet.x_ = x_ - v.x_;
        vRet.y_ = y_ - v.y_;
        vRet.Unit();

        return vRet;
    }

    const TPoint2D &operator *(double a)
    {
        TPoint2D vRet;
        vRet.x_ = x_ * a;
        vRet.y_ = y_ * a;
        return vRet;
    }
};

#endif

 

2. File cpp

#include "stdafx.h"
#include "TPoint2D.h"


TPoint2D::TPoint2D()
{
}

TPoint2D::TPoint2D(float x, float y)
{
    x_ = x;
    y_ = y;
}

TPoint2D::TPoint2D(float v[2])
{
    x_ = v[0]; y_ = v[1]; 
}

TPoint2D::TPoint2D(const TPoint2D& v)
{
    *this = v;
}

TPoint2D::~TPoint2D()
{

}

TPoint2D TPoint2D::GetPointDis(const TVector2D& v, float d)
{
    TVector2D vTmp = v;
    vTmp.Unit();
    
    TPoint2D pt;
    pt.x_ = this->x_ + vTmp.x_*d;
    pt.y_ = this->y_ + vTmp.y_*d;

    return pt;
}

float TPoint2D::GetDistance(const TPoint2D& p)
{
    float vx = this->x_ - p.x_;
    float vy = this->y_ - p.y_;

    float ret = sqrt(vx*vx + vy*vy);
    return ret;
}

TPoint2D TPoint2D::GetMidPoint(const TPoint2D& p)
{
    TPoint2D midPt;
    midPt.x_ = 0.5*(this->x_ + p.x_);
    midPt.y_ = 0.5*(this->y_ + p.y_);

    return midPt;
}

End.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.