1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
|
#include "ximage.h"
#include "ximath.h"
#include <math.h>
//this module should contain some classes for geometrical transformations
//usable with selections, etc... once it's done, that is. :)
CxPoint2::CxPoint2()
{
x=y=0.0f;
}
CxPoint2::CxPoint2(float const x_, float const y_)
{
x=x_;
y=y_;
}
CxPoint2::CxPoint2(CxPoint2 const &p)
{
x=p.x;
y=p.y;
}
float CxPoint2::Distance(CxPoint2 const p2)
{
return (float)sqrt((x-p2.x)*(x-p2.x)+(y-p2.y)*(y-p2.y));
}
float CxPoint2::Distance(float const x_, float const y_)
{
return (float)sqrt((x-x_)*(x-x_)+(y-y_)*(y-y_));
}
CxRect2::CxRect2()
{
}
CxRect2::CxRect2(float const x1_, float const y1_, float const x2_, float const y2_)
{
botLeft.x=x1_;
botLeft.y=y1_;
topRight.x=x2_;
topRight.y=y2_;
}
CxRect2::CxRect2(CxRect2 const &p)
{
botLeft=p.botLeft;
topRight=p.topRight;
}
float CxRect2::Surface() const
/*
* Returns the surface of rectangle.
*/
{
return (topRight.x-botLeft.x)*(topRight.y-botLeft.y);
}
CxRect2 CxRect2::CrossSection(CxRect2 const &r2) const
/*
* Returns crossection with another rectangle.
*/
{
CxRect2 cs;
cs.botLeft.x=cxmax(botLeft.x, r2.botLeft.x);
cs.botLeft.y=cxmax(botLeft.y, r2.botLeft.y);
cs.topRight.x=cxmin(topRight.x, r2.topRight.x);
cs.topRight.y=cxmin(topRight.y, r2.topRight.y);
if (cs.botLeft.x<=cs.topRight.x && cs.botLeft.y<=cs.topRight.y) {
return cs;
} else {
return CxRect2(0,0,0,0);
}//if
}
CxPoint2 CxRect2::Center() const
/*
* Returns the center point of rectangle.
*/
{
return CxPoint2((topRight.x+botLeft.x)/2.0f, (topRight.y+botLeft.y)/2.0f);
}
float CxRect2::Width() const
//returns rectangle width
{
return topRight.x-botLeft.x;
}
float CxRect2::Height() const
//returns rectangle height
{
return topRight.y-botLeft.y;
}
|