2 * psychlops_g_fundamental.cpp
3 * Psychlops Standard Library (Universal)
5 * Last Modified 2005/10/05 by Kenchi HOSOKAWA
6 * (C) 2005 Kenchi HOSOKAWA, Kazushi MARUYA, Takao SATO
11 #include "../math/psychlops_math.h"
12 #include "psychlops_g_fundamental.h"
13 #include "psychlops_g_module.h"
21 /* Point::Point() : x(0.0), y(0.0), z(0.0) {}
23 Point::Point(const double ix, const double iy, const double iz) : x(ix), y(iy), z(iz) {}
24 Point& Point::set(const double ix, const double iy, const double iz) {
28 Point& Point::shift(const double h, const double v, const double d) {
29 setbypix(x+h,y+v,z+d);
33 Point& Point::centering() {
34 *this = Drawable::prime->getCenter();
37 Point& Point::centering(const Figure &fig) {
38 *this = fig.getDatum();
41 /* Point& Point::centering(const double h, const double v, const double d) {
46 Point& Point::setX(const double val) { x = val; return *this; }
47 Point& Point::setY(const double val) { y = val; return *this; }
49 double Point::getX() const { return x; }
50 double Point::getY() const { return y; }
51 double Point::getZ() const { return z; }
57 Point Point::operator+(const Point& rhs) {
58 return Point(x+rhs.x, y+rhs.y, z+rhs.z);
60 Point Point::operator-(const Point& rhs) {
61 return Point(x-rhs.x, y-rhs.y, z-rhs.z);
65 double Point::length() const {
\r
66 return sqrt((x*x)+(y*y)+(z*z));
\r
69 } /* <- namespace Psycholops */
83 Length::Length() : px_(0.0) {}
84 Length::Length(const int val) : px_((double)val) {}
85 Length::Length(const double val) : px_(val) {}
86 Length::Length(const Length &val) : px_(val.px_) {}
88 Length::operator double() const {
91 Length & Length::operator =(const double val) {
99 Length operator *(double pixels, LENGTH_PIXEL &unit) {
100 return Length(pixels);
106 Angle operator *(double degrees, ANGLE_DEGREE &unit) {
107 return Angle(degrees, degree);
110 Angle operator *(double radians, ANGLE_RADIAN &unit) {
111 return Angle(radians, radian);
114 Angle::Angle(double decadegree, int dummy) : decadegree_(decadegree) {
118 Angle::Angle(const int degrees) {
119 set_as_degree((double)degrees);
121 Angle::Angle(const double degrees) {
122 set_as_degree(degrees);
124 Angle::Angle(const double degrees, ANGLE_DEGREE &unit) {
125 set_as_degree(degrees);
127 Angle::Angle(const double radians, ANGLE_RADIAN &unit) {
128 set_as_radian(radians);
130 Angle::Angle(const Angle &init) : decadegree_(init.decadegree_) {
132 Angle::operator double() const {
133 return decadegree_/SCALE_TO_DEGREE;
135 Angle Angle::operator =(const double rhs) {
139 Angle Angle::operator +(Angle rhs) const {
140 return Angle(decadegree_+rhs.decadegree_, 0);
142 Angle Angle::operator -(Angle rhs) const {
143 return Angle(decadegree_-rhs.decadegree_, 0);
145 Angle & Angle::operator +=(Angle rhs) {
146 decadegree_ += rhs.decadegree_;
149 Angle & Angle::operator -=(Angle rhs) {
150 decadegree_ -= rhs.decadegree_;
153 double Angle::clip() const {
154 return Math::mod(decadegree_, PERIOD)/SCALE_TO_DEGREE;
156 double Angle::at_degree() const {
157 return decadegree_/SCALE_TO_DEGREE;
159 double Angle::at_radian() const {
160 return PI * decadegree_ / HALF_PERIOD;
162 double Angle::sin() const {
163 return ::sin(this->at_radian());
165 double Angle::cos() const {
166 return ::cos(this->at_radian());
168 double Angle::tan() const {
169 return ::tan(this->at_radian());
171 void Angle::set_as_degree(double degrees) {
172 decadegree_ = degrees * SCALE_TO_DEGREE;
174 void Angle::set_as_decadegree(double decadegree) {
175 decadegree_ = decadegree;
177 void Angle::set_as_radian(double radians) {
178 decadegree_ = HALF_PERIOD * radians / PI;
181 const double Angle::HALF_PERIOD = PERIOD/2;
182 const double Angle::SCALE_TO_DEGREE = PERIOD/360;
184 const double Angle::PERIOD = 3600;
188 } /* <- namespace Psycholops */