Figure 4: Class Point

// **********************************************************
//   File: Point.h
//   Description: Definition of class Point
//
//   Author: Carlos Moreno
// **********************************************************

#ifndef __POINT_H__
#define __POINT_H__

class Segment;
class Triangle;
class Polygon;

class Point 
{
public:

        // Constructor
    explicit Point (double _x = 0, double _y = 0)
        : x(_x), y(_y) {}

        // Geometric and miscelaneous operations
    void draw (int radius = 0) const;
        // Platform dependent - implemented for Win32

    bool is_on (const Segment &) const;

    bool is_inside (const Triangle &) const;
    bool is_inside (const Polygon &) const;

        // Arithmetic operators
    Point operator+ (const Point & p) const;
    Point operator- (const Point & p) const;
    Point operator* (double r) const;
    double operator* (const Point & p) const;  // Scalar product
    Point operator/ (double r) const;

        // Comparison operators
    bool operator== (const Point & p) const;
    bool operator!= (const Point & p) const;

    bool operator< (const Point & p) const;
    bool operator> (const Point & p) const;

        // get utility functions
    double get_x () const
    {
        return x;
    }

    double get_y () const
    {
        return y;
    }

private:
    double x,y;
};


inline Point operator* (double x, const Point & p)
{
    return p*x;         // Invoke member-function
}


const Point origin (0,0);

#endif

// **********************************************************
//   File: Point.cpp
//   Description: Implementation of class Point
//
//   Author: Carlos Moreno
// **********************************************************

#include "Point.h"
#include "Segment.h"
#include "Triangle.h"
#include "Polygon.h"

#include "graphic_interface.h"


bool Point::is_on (const Segment & s) const
{
    return s.contains (*this);
}


bool Point::is_inside (const Triangle & t) const
{
    return t.contains (*this);
}


bool Point::is_inside (const Polygon & P) const
{
    return P.contains (*this);
}


void Point::draw (int radius) const
{
    draw_point (x, y, radius);
}


Point Point::operator+ (const Point & p) const
{
    return Point (x + p.x, y + p.y);
}


Point Point::operator- (const Point & p) const
{
    return Point (x - p.x, y - p.y);
}


Point Point::operator* (double r) const
{
    return Point (r*x, r*y);
}


double Point::operator* (const Point & p) const
{
    return x * p.x + y * p.y;       // Scalar product
}


Point Point::operator/ (double r) const
{
    return Point (x/r, y/r);
}


bool Point::operator== (const Point & p) const
{
    return x == p.x && y == p.y;
}


bool Point::operator!= (const Point & p) const
{
    return !(*this == p);
}
//End of File