Projektív sík
 
Betöltés...
Keresés...
Nincs egyezés
pobject.hpp
Ugrás a fájl dokumentációjához.
1
5
6#ifndef POBJECT_HPP
7#define POBJECT_HPP
8
9#include <iostream>
10using namespace std;
11
12namespace bme {
13
20 template<typename T>
21 class PObject {
22 private:
23 T x, y, z;
24
25 void scale() {
26 if (z != T(0)) {
27 x /= z;
28 y /= z;
29 z = T(1);
30 }
31 else if (y != T(0)) {
32 x /= y;
33 y = T(1);
34 }
35 else if (x != T(0)) {
36 x = T(1);
37 }
38 }
39
40 T dot(const PObject<T>& other) const {
41 return x * other.x + y * other.y + z * other.z;
42 }
43
44 protected:
46 bool equals(const PObject<T>& other) const {
47 return ((x == other.x) && (y == other.y) && (z == other.z));
48 }
49
51 bool less(const PObject<T>& other) const {
52 if (x < other.x) { return true; }
53 if (x > other.x) { return false; }
54 if (y < other.y) { return true; }
55 if (y > other.y) { return false; }
56 if (z < other.z) { return true; }
57 return false;
58 }
59
61 bool incident(const PObject<T>& other) const {
62 return dot(other) == T(0);
63 }
64
66 PObject<T> op(const PObject<T>& other) const {
67 if (equals(other)) { return PObject<T>(T(0), T(0), T(0)); }
68
69 T c1 = y * other.z - z * other.y;
70 T c2 = z * other.x - x * other.z;
71 T c3 = x * other.y - y * other.x;
72
73 return PObject<T>(c1, c2, c3);
74
75 }
76
77 public:
79 x = y = T(0);
80 z = T(1);
81 }
82 PObject(T a, T b, T c) {
83 x = a;
84 y = b;
85 z = c;
86 scale();
87 }
88
90 T getX() const { return x; }
92 T getY() const { return y; }
94 T getZ() const { return z; }
95
97 bool is_invalid() const {
98 return (x == T(0)) && (y == T(0)) && (z == T(0));
99 }
100 };
101
103 template<typename T>
104 ostream& operator<<(ostream& os, const PObject<T>& A) {
105 os << "<" << A.getX() << "," << A.getY() << "," << A.getZ() << ">";
106 return os;
107 }
108
110 template<typename T>
111 bool dependent(const PObject<T>& A, const PObject<T>& B, const PObject<T>& C) {
112 T a1 = A.getX();
113 T a2 = A.getY();
114 T a3 = A.getZ();
115
116 T b1 = B.getX();
117 T b2 = B.getY();
118 T b3 = B.getZ();
119
120 T c1 = C.getX();
121 T c2 = C.getY();
122 T c3 = C.getZ();
123
124 T det = a1 * b2 * c3 + a2 * b3 * c1 + a3 * b1 * c2
125 - a3 * b2 * c1 - a1 * b3 * c2 - a2 * b1 * c3;
126
127 return det == T(0);
128 }
129
130}
131
132#endif
PObject< T > op(const PObject< T > &other) const
A leszármazottak + ill. * operátorának közös megvalósítása.
Definition pobject.hpp:66
bool incident(const PObject< T > &other) const
A leszármazottak illeszkedést vizsgáló tagfüggvényének közös megvalósítása.
Definition pobject.hpp:61
T getY() const
Az objektum y koordinátájának lekérdezése.
Definition pobject.hpp:92
PObject(T a, T b, T c)
Definition pobject.hpp:82
T getZ() const
Az objektum z koordinátájának lekérdezése.
Definition pobject.hpp:94
bool equals(const PObject< T > &other) const
A leszármazottak == operátorának közös megvalósítása.
Definition pobject.hpp:46
bool is_invalid() const
Invalid objektum lekérdezése.
Definition pobject.hpp:97
T getX() const
Az objektum x koordinátájának lekérdezése.
Definition pobject.hpp:90
bool less(const PObject< T > &other) const
A leszármazottak < operátorának közös megvalósítása.
Definition pobject.hpp:51
Definition pline.hpp:11
bool dependent(const PObject< T > &A, const PObject< T > &B, const PObject< T > &C)
Projektív objektumok összefüggőségének vizsgálata.
Definition pobject.hpp:111
ostream & operator<<(ostream &os, const PLine< T > &P)
Projektív egyenes koordinátáinak kiírása a képernyőre.
Definition pline.hpp:60