Alex Allen / vectr
Committer:
AlexAllen
Date:
Sat Oct 13 12:22:02 2012 +0000
Revision:
0:55dbdc9614f8
A library for vectors

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AlexAllen 0:55dbdc9614f8 1 /* Copyright (c) 2011 Alex Allen, MIT License
AlexAllen 0:55dbdc9614f8 2 *
AlexAllen 0:55dbdc9614f8 3 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
AlexAllen 0:55dbdc9614f8 4 * and associated documentation files (the "Software"), to deal in the Software without restriction,
AlexAllen 0:55dbdc9614f8 5 * including without limitation the rights to use, copy, modify, merge, publish, distribute,
AlexAllen 0:55dbdc9614f8 6 * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
AlexAllen 0:55dbdc9614f8 7 * furnished to do so, subject to the following conditions:
AlexAllen 0:55dbdc9614f8 8 *
AlexAllen 0:55dbdc9614f8 9 * The above copyright notice and this permission notice shall be included in all copies or
AlexAllen 0:55dbdc9614f8 10 * substantial portions of the Software.
AlexAllen 0:55dbdc9614f8 11 *
AlexAllen 0:55dbdc9614f8 12 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
AlexAllen 0:55dbdc9614f8 13 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
AlexAllen 0:55dbdc9614f8 14 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
AlexAllen 0:55dbdc9614f8 15 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
AlexAllen 0:55dbdc9614f8 16 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
AlexAllen 0:55dbdc9614f8 17 */
AlexAllen 0:55dbdc9614f8 18
AlexAllen 0:55dbdc9614f8 19 #include "vectr.h"
AlexAllen 0:55dbdc9614f8 20 #include <cmath>
AlexAllen 0:55dbdc9614f8 21 #include <iostream>
AlexAllen 0:55dbdc9614f8 22 using namespace std;
AlexAllen 0:55dbdc9614f8 23
AlexAllen 0:55dbdc9614f8 24
AlexAllen 0:55dbdc9614f8 25 vectr::vectr()
AlexAllen 0:55dbdc9614f8 26 {
AlexAllen 0:55dbdc9614f8 27 x=y=z=0;
AlexAllen 0:55dbdc9614f8 28 }
AlexAllen 0:55dbdc9614f8 29
AlexAllen 0:55dbdc9614f8 30 vectr::vectr(double num)
AlexAllen 0:55dbdc9614f8 31 {
AlexAllen 0:55dbdc9614f8 32 x=y=z=num;
AlexAllen 0:55dbdc9614f8 33 }
AlexAllen 0:55dbdc9614f8 34
AlexAllen 0:55dbdc9614f8 35 vectr::vectr(double a, double b)
AlexAllen 0:55dbdc9614f8 36 {
AlexAllen 0:55dbdc9614f8 37 x = a;
AlexAllen 0:55dbdc9614f8 38 y = b;
AlexAllen 0:55dbdc9614f8 39 z = 0;
AlexAllen 0:55dbdc9614f8 40 }
AlexAllen 0:55dbdc9614f8 41
AlexAllen 0:55dbdc9614f8 42 vectr::vectr(double a, double b, double c)
AlexAllen 0:55dbdc9614f8 43 {
AlexAllen 0:55dbdc9614f8 44 x = a;
AlexAllen 0:55dbdc9614f8 45 y = b;
AlexAllen 0:55dbdc9614f8 46 z = c;
AlexAllen 0:55dbdc9614f8 47 }
AlexAllen 0:55dbdc9614f8 48
AlexAllen 0:55dbdc9614f8 49 void vectr::set(double a, double b, double c)
AlexAllen 0:55dbdc9614f8 50 {
AlexAllen 0:55dbdc9614f8 51 x = a;
AlexAllen 0:55dbdc9614f8 52 y = b;
AlexAllen 0:55dbdc9614f8 53 z = c;
AlexAllen 0:55dbdc9614f8 54 }
AlexAllen 0:55dbdc9614f8 55
AlexAllen 0:55dbdc9614f8 56 void vectr::setx(double a)
AlexAllen 0:55dbdc9614f8 57 {
AlexAllen 0:55dbdc9614f8 58 x = a;
AlexAllen 0:55dbdc9614f8 59 }
AlexAllen 0:55dbdc9614f8 60
AlexAllen 0:55dbdc9614f8 61 void vectr::sety(double b)
AlexAllen 0:55dbdc9614f8 62 {
AlexAllen 0:55dbdc9614f8 63 y = b;
AlexAllen 0:55dbdc9614f8 64 }
AlexAllen 0:55dbdc9614f8 65
AlexAllen 0:55dbdc9614f8 66 void vectr::setz(double c)
AlexAllen 0:55dbdc9614f8 67 {
AlexAllen 0:55dbdc9614f8 68 z = c;
AlexAllen 0:55dbdc9614f8 69 }
AlexAllen 0:55dbdc9614f8 70
AlexAllen 0:55dbdc9614f8 71 double vectr::getx()
AlexAllen 0:55dbdc9614f8 72 {
AlexAllen 0:55dbdc9614f8 73 return x;
AlexAllen 0:55dbdc9614f8 74 }
AlexAllen 0:55dbdc9614f8 75
AlexAllen 0:55dbdc9614f8 76 double vectr::gety()
AlexAllen 0:55dbdc9614f8 77 {
AlexAllen 0:55dbdc9614f8 78 return y;
AlexAllen 0:55dbdc9614f8 79 }
AlexAllen 0:55dbdc9614f8 80
AlexAllen 0:55dbdc9614f8 81 double vectr::getz()
AlexAllen 0:55dbdc9614f8 82 {
AlexAllen 0:55dbdc9614f8 83 return z;
AlexAllen 0:55dbdc9614f8 84 }
AlexAllen 0:55dbdc9614f8 85
AlexAllen 0:55dbdc9614f8 86 double vectr::mag()
AlexAllen 0:55dbdc9614f8 87 {
AlexAllen 0:55dbdc9614f8 88 return sqrt(x*x + y*y + z*z);
AlexAllen 0:55dbdc9614f8 89 }
AlexAllen 0:55dbdc9614f8 90
AlexAllen 0:55dbdc9614f8 91 double vectr::mag2()
AlexAllen 0:55dbdc9614f8 92 {
AlexAllen 0:55dbdc9614f8 93 return x*x + y*y + z*z;
AlexAllen 0:55dbdc9614f8 94 }
AlexAllen 0:55dbdc9614f8 95
AlexAllen 0:55dbdc9614f8 96 vectr vectr::unit()
AlexAllen 0:55dbdc9614f8 97 {
AlexAllen 0:55dbdc9614f8 98 double size = sqrt(x*x+y*y+z*z);
AlexAllen 0:55dbdc9614f8 99 vectr temp;
AlexAllen 0:55dbdc9614f8 100
AlexAllen 0:55dbdc9614f8 101 temp.x = x/size;
AlexAllen 0:55dbdc9614f8 102 temp.y = y/size;
AlexAllen 0:55dbdc9614f8 103 temp.z = z/size;
AlexAllen 0:55dbdc9614f8 104
AlexAllen 0:55dbdc9614f8 105 return temp;
AlexAllen 0:55dbdc9614f8 106 }
AlexAllen 0:55dbdc9614f8 107
AlexAllen 0:55dbdc9614f8 108 vectr vectr::operator+(vectr ob2)
AlexAllen 0:55dbdc9614f8 109 {
AlexAllen 0:55dbdc9614f8 110 vectr temp;
AlexAllen 0:55dbdc9614f8 111
AlexAllen 0:55dbdc9614f8 112 temp.x = x + ob2.x;
AlexAllen 0:55dbdc9614f8 113 temp.y = y + ob2.y;
AlexAllen 0:55dbdc9614f8 114 temp.z = z + ob2.z;
AlexAllen 0:55dbdc9614f8 115
AlexAllen 0:55dbdc9614f8 116 return temp;
AlexAllen 0:55dbdc9614f8 117 }
AlexAllen 0:55dbdc9614f8 118
AlexAllen 0:55dbdc9614f8 119 vectr vectr::operator-(vectr ob2)
AlexAllen 0:55dbdc9614f8 120 {
AlexAllen 0:55dbdc9614f8 121 vectr temp;
AlexAllen 0:55dbdc9614f8 122
AlexAllen 0:55dbdc9614f8 123 temp.x = x - ob2.x;
AlexAllen 0:55dbdc9614f8 124 temp.y = y - ob2.y;
AlexAllen 0:55dbdc9614f8 125 temp.z = z - ob2.z;
AlexAllen 0:55dbdc9614f8 126
AlexAllen 0:55dbdc9614f8 127 return temp;
AlexAllen 0:55dbdc9614f8 128 }
AlexAllen 0:55dbdc9614f8 129
AlexAllen 0:55dbdc9614f8 130 double vectr::operator*(vectr ob2)
AlexAllen 0:55dbdc9614f8 131 {
AlexAllen 0:55dbdc9614f8 132 return x*ob2.x + y*ob2.y + z*ob2.z;
AlexAllen 0:55dbdc9614f8 133 }
AlexAllen 0:55dbdc9614f8 134
AlexAllen 0:55dbdc9614f8 135 vectr vectr::operator*(double num)
AlexAllen 0:55dbdc9614f8 136 {
AlexAllen 0:55dbdc9614f8 137 vectr temp;
AlexAllen 0:55dbdc9614f8 138
AlexAllen 0:55dbdc9614f8 139 temp.x = x * num;
AlexAllen 0:55dbdc9614f8 140 temp.y = y * num;
AlexAllen 0:55dbdc9614f8 141 temp.z = z * num;
AlexAllen 0:55dbdc9614f8 142
AlexAllen 0:55dbdc9614f8 143 return temp;
AlexAllen 0:55dbdc9614f8 144 }
AlexAllen 0:55dbdc9614f8 145
AlexAllen 0:55dbdc9614f8 146 vectr operator*(double num, vectr ob)
AlexAllen 0:55dbdc9614f8 147 {
AlexAllen 0:55dbdc9614f8 148 vectr temp;
AlexAllen 0:55dbdc9614f8 149
AlexAllen 0:55dbdc9614f8 150 temp.x = ob.x * num;
AlexAllen 0:55dbdc9614f8 151 temp.y = ob.y * num;
AlexAllen 0:55dbdc9614f8 152 temp.z = ob.z * num;
AlexAllen 0:55dbdc9614f8 153
AlexAllen 0:55dbdc9614f8 154 return temp;
AlexAllen 0:55dbdc9614f8 155 }
AlexAllen 0:55dbdc9614f8 156
AlexAllen 0:55dbdc9614f8 157 vectr vectr::operator%(vectr ob2)
AlexAllen 0:55dbdc9614f8 158 {
AlexAllen 0:55dbdc9614f8 159 vectr temp;
AlexAllen 0:55dbdc9614f8 160
AlexAllen 0:55dbdc9614f8 161 temp.x = y * ob2.z - z * ob2.y;
AlexAllen 0:55dbdc9614f8 162 temp.y = z * ob2.x - x * ob2.z;
AlexAllen 0:55dbdc9614f8 163 temp.z = x * ob2.y - y * ob2.x;
AlexAllen 0:55dbdc9614f8 164
AlexAllen 0:55dbdc9614f8 165 return temp;
AlexAllen 0:55dbdc9614f8 166 }
AlexAllen 0:55dbdc9614f8 167
AlexAllen 0:55dbdc9614f8 168 vectr vectr::operator/(double num)
AlexAllen 0:55dbdc9614f8 169 {
AlexAllen 0:55dbdc9614f8 170 vectr temp;
AlexAllen 0:55dbdc9614f8 171
AlexAllen 0:55dbdc9614f8 172 temp.x = x / num;
AlexAllen 0:55dbdc9614f8 173 temp.y = y / num;
AlexAllen 0:55dbdc9614f8 174 temp.z = z / num;
AlexAllen 0:55dbdc9614f8 175
AlexAllen 0:55dbdc9614f8 176 return temp;
AlexAllen 0:55dbdc9614f8 177 }
AlexAllen 0:55dbdc9614f8 178
AlexAllen 0:55dbdc9614f8 179 vectr operator/(double num, vectr ob)
AlexAllen 0:55dbdc9614f8 180 {
AlexAllen 0:55dbdc9614f8 181 vectr temp;
AlexAllen 0:55dbdc9614f8 182
AlexAllen 0:55dbdc9614f8 183 temp.x = num / ob.x;
AlexAllen 0:55dbdc9614f8 184 temp.y = num / ob.y;
AlexAllen 0:55dbdc9614f8 185 temp.z = num / ob.z;
AlexAllen 0:55dbdc9614f8 186
AlexAllen 0:55dbdc9614f8 187 return temp;
AlexAllen 0:55dbdc9614f8 188 }
AlexAllen 0:55dbdc9614f8 189
AlexAllen 0:55dbdc9614f8 190 double vectr::operator/(vectr ob2)
AlexAllen 0:55dbdc9614f8 191 {
AlexAllen 0:55dbdc9614f8 192 ob2.x /= 1.0;
AlexAllen 0:55dbdc9614f8 193 ob2.y /= 1.0;
AlexAllen 0:55dbdc9614f8 194 ob2.z /= 1.0;
AlexAllen 0:55dbdc9614f8 195
AlexAllen 0:55dbdc9614f8 196 return x*ob2.x + y*ob2.y + z*ob2.z;
AlexAllen 0:55dbdc9614f8 197 }
AlexAllen 0:55dbdc9614f8 198
AlexAllen 0:55dbdc9614f8 199 vectr vectr::operator+=(vectr ob2)
AlexAllen 0:55dbdc9614f8 200 {
AlexAllen 0:55dbdc9614f8 201 x += ob2.x;
AlexAllen 0:55dbdc9614f8 202 y += ob2.y;
AlexAllen 0:55dbdc9614f8 203 z += ob2.z;
AlexAllen 0:55dbdc9614f8 204
AlexAllen 0:55dbdc9614f8 205 return *this;
AlexAllen 0:55dbdc9614f8 206 }
AlexAllen 0:55dbdc9614f8 207
AlexAllen 0:55dbdc9614f8 208 vectr vectr::operator-=(vectr ob2)
AlexAllen 0:55dbdc9614f8 209 {
AlexAllen 0:55dbdc9614f8 210 x -= ob2.x;
AlexAllen 0:55dbdc9614f8 211 y -= ob2.y;
AlexAllen 0:55dbdc9614f8 212 z -= ob2.z;
AlexAllen 0:55dbdc9614f8 213
AlexAllen 0:55dbdc9614f8 214 return *this;
AlexAllen 0:55dbdc9614f8 215 }
AlexAllen 0:55dbdc9614f8 216
AlexAllen 0:55dbdc9614f8 217 vectr vectr::operator*=(double num)
AlexAllen 0:55dbdc9614f8 218 {
AlexAllen 0:55dbdc9614f8 219 x *= num;
AlexAllen 0:55dbdc9614f8 220 y *= num;
AlexAllen 0:55dbdc9614f8 221 z *= num;
AlexAllen 0:55dbdc9614f8 222
AlexAllen 0:55dbdc9614f8 223 return *this;
AlexAllen 0:55dbdc9614f8 224 }
AlexAllen 0:55dbdc9614f8 225
AlexAllen 0:55dbdc9614f8 226 vectr vectr::operator/=(double num)
AlexAllen 0:55dbdc9614f8 227 {
AlexAllen 0:55dbdc9614f8 228 x /= num;
AlexAllen 0:55dbdc9614f8 229 y /= num;
AlexAllen 0:55dbdc9614f8 230 z /= num;
AlexAllen 0:55dbdc9614f8 231
AlexAllen 0:55dbdc9614f8 232 return *this;
AlexAllen 0:55dbdc9614f8 233 }
AlexAllen 0:55dbdc9614f8 234
AlexAllen 0:55dbdc9614f8 235 ostream &operator<<(ostream &stream, vectr ob)
AlexAllen 0:55dbdc9614f8 236 {
AlexAllen 0:55dbdc9614f8 237 stream << "(" << ob.x << ", ";
AlexAllen 0:55dbdc9614f8 238 stream << ob.y << ", ";
AlexAllen 0:55dbdc9614f8 239 stream << ob.z << ")";
AlexAllen 0:55dbdc9614f8 240
AlexAllen 0:55dbdc9614f8 241 return stream;
AlexAllen 0:55dbdc9614f8 242 }