C++ Hình Học Không Gian: C++ Line2D
Hi, chào mừng các bạn trở lại chủ đề c++ hình họa
Bài tiếp theo, chúng ta sẽ cùng học cách xây dựng lớp Line2d.
Hai bài trước, chúng ta đã có lớp vector2d, lớp point2d, và bây giờ từ 2 dữ liệu đã có,
chúng ta hoàn toàn có thể xây dựng được đối tượng line2d
1. Lý Thuyết cơ bản
Line là một đối tượng hình học được thể hiện bằng 2 điểm, ở đây chúng ta bàn tới khái niệm line hữu hạn.
Line có các hàm xử lý cơ bản thế nào.
– Hàm tính trung điểm của line
– Hàm tính vector chỉ phương của line.
– Hàm tính độ dài của line
– Phép gán line, cho phép gán dữ liệu của line a cho line b
– Có thể check line trùng nhau (trùng thuận, trùng ngược)
– Kiểm tra một point có mối quan hệ với line (nằm trên line, nằm ngoài line)
– Các chức năng khác mà bạn có thể thêm vào.
2. Code sample
#ifndef TLINE_2D_H_ #define TLINE_2D_H_ #include "TPoint2D.h" #include "TVector2D.h" class TLine2D { public: TLine2D(); TLine2D(const TPoint2D& p1, const TPoint2D& p2); TLine2D(TLine2D& line); ~TLine2D(); TLine2D& operator =(const TLine2D& line); void SetStartPoint(const TPoint2D& p); TPoint2D GetStartPoint(); void SetEndPoint(const TPoint2D& p); TPoint2D GetEndPoint(); TPoint2D GetMidPoint(); TVector2D GetDirVector(); float GetLength(); // ret = 0 => point on line; // ret = 1 => point is out line; int CheckRelPoint(const TPoint2D& p); private: TPoint2D m_p1; TPoint2D m_p2; }; #endif // File Cpp #include "TLine2D.h" TLine2D::TLine2D() { } TLine2D::~TLine2D() { } TLine2D::TLine2D(const TPoint2D& p1, const TPoint2D& p2) { } TLine2D::TLine2D(TLine2D& line) { } void TLine2D::SetStartPoint(const TPoint2D& p) { m_p1 = p; } TPoint2D TLine2D::GetStartPoint() { return m_p1; } void TLine2D::SetEndPoint(const TPoint2D& p) { m_p2 = p; } TPoint2D TLine2D::GetEndPoint() { return m_p2; } TLine2D& TLine2D::operator =(const TLine2D& line) { this->m_p1 = line.m_p1; this->m_p2 = line.m_p2; return *this; } TPoint2D TLine2D::GetMidPoint() { TPoint2D pt = m_p1.GetMidPoint(m_p2); return pt; } TVector2D TLine2D::GetDirVector() { TVector2D vDir = m_p1 - m_p2; return vDir; } float TLine2D::GetLength() { float d = m_p1.GetDistance(m_p2); return d; } int TLine2D::CheckRelPoint(const TPoint2D& p) { int ret = 1; float d1 = m_p1.GetDistance(p); float d2 = m_p2.GetDistance(p); float d = m_p1.GetDistance(m_p2); float sub = fabs((d1 + d2) - d); if (sub < TEXP_4) { ret = 0; } return ret; }
Ok.