add config file generator
Stefan Schuermans authored 7 years ago
|
5) *
6) * This program is free software: you can redistribute it and/or modify
7) * it under the terms of the GNU General Public License as published by
8) * the Free Software Foundation, version 3 of the License.
9) *
10) *
11) * This program is distributed in the hope that it will be useful,
12) * but WITHOUT ANY WARRANTY; without even the implied warranty of
13) * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14) * GNU General Public License for more details.
15) *
16) * You should have received a copy of the GNU Lesser General Public License
17) * along with this program. If not, see <http://www.gnu.org/licenses/>.
18) */
19)
20) #include <stdlib.h>
21)
22) #include "box.h"
23) #include "constants.h"
24) #include "point.h"
25)
26) Box::Box()
27) {
28) }
29)
30) Box::Box(const Point &bl, const Point &tr):
31) mBL(bl),
32) mTR(tr)
33) {
34) fix();
35) }
36)
37) void Box::fix()
38) {
39) if (mBL.mX > mTR.mX) {
40) double tmp = mBL.mX;
41) mBL.mX = mTR.mX;
42) mTR.mX = tmp;
43) }
44) if (mBL.mY > mTR.mY) {
45) double tmp = mBL.mY;
46) mBL.mY = mTR.mY;
47) mTR.mY = tmp;
48) }
49) }
50)
51) void Box::getCenter(Point ¢er)
52) {
53) center = (mBL + mTR) / 2.0;
54) }
55)
56) void Box::include(const Point &p)
57) {
58) if (p.mX < mBL.mX)
59) mBL.mX = p.mX;
60) if (p.mY < mBL.mY)
61) mBL.mY = p.mY;
62) if (p.mX > mTR.mX)
63) mTR.mX = p.mX;
64) if (p.mY > mTR.mY)
65) mTR.mY = p.mY;
66) }
67)
68) void Box::include(const Box &b)
69) {
70) if (b.mBL.mX < mBL.mX)
71) mBL.mX = b.mBL.mX;
72) if (b.mBL.mY < mBL.mY)
73) mBL.mY = b.mBL.mY;
74) if (b.mTR.mX > mTR.mX)
75) mTR.mX = b.mTR.mX;
76) if (b.mTR.mY > mTR.mY)
77) mTR.mY = b.mTR.mY;
78) }
79)
80) bool Box::isIntersecting(const Box *pBox) const
81) {
82) return getIntersection(pBox, NULL);
83) }
84)
85) bool Box::getIntersection(const Box *pBox, Box *pIntersect) const
86) {
87) Point bl = mBL, tr = mTR;
88) if (pBox->mBL.mX > bl.mX)
89) bl.mX = pBox->mBL.mX;
90) if (pBox->mBL.mY > bl.mY)
91) bl.mY = pBox->mBL.mY;
92) if (pBox->mTR.mX < tr.mX)
93) tr.mX = pBox->mTR.mX;
94) if (pBox->mTR.mY < tr.mY)
95) tr.mY = pBox->mTR.mY;
96) if (tr.mX - bl.mX < -EPSILON || tr.mY - bl.mY < -EPSILON)
97) return false;
98) if (pIntersect) {
99) pIntersect->mBL = bl;
100) pIntersect->mTR = tr;
101) pIntersect->fix();
102) }
103) return true;
104) }
105)
|
implement simulator config...
Stefan Schuermans authored 7 years ago
|
106) void Box::getRelative(const Point &abs, Point &rel) const
107) {
108) Point delta = mTR - mBL;
109) if (delta.mX > 0.0) {
110) rel.mX = (abs.mX - mBL.mX) / delta.mX;
111) } else {
112) rel.mX = 0.0; // box width zero - relative position cannot be computed
113) }
114) if (delta.mY > 0.0) {
115) rel.mY = (abs.mY - mBL.mY) / delta.mY;
116) } else {
117) rel.mY = 0.0; // box height zero - relative position cannot be computed
118) }
119) }
120)
|