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