Go to the documentation of this file.
20 #ifndef INCLUDE_WYKOBI
21 #define INCLUDE_WYKOBI
34 static const char VERSION_INFORMATION[] =
"Wykobi Version 0.0.5";
35 static const char AUTHOR_INFORMATION[] =
"Arash Partow";
36 static const char EPOCH_VERSION[] =
"C578AC5A:35A4123B:DF32F721";
70 template <
typename T, std::
size_t D>
73 template <
typename T = Float>
91 return ((0 == index) ?
x :
y);
94 return ((0 == index) ?
x :
y);
98 return ((0 == index) ?
x :
y);
101 return ((0 == index) ?
x :
y);
107 template <
typename T = Float>
138 inline reference value(
const std::size_t& index) {
165 template <
typename T, std::
size_t D>
166 class pointnd :
public geometric_entity {
177 pointnd(
const T& v0,
const T& v1,
const T& v2) {
182 pointnd(
const T& v0,
const T& v1,
const T& v2,
const T& v3) {
189 for (std::size_t i = 0; i < D; ++i)
v[i] = point.v[i];
193 for (std::size_t i = 0; i < D; ++i)
v[i] = point[i];
197 for (std::size_t i = 0; i < D; ++i)
v[i] = point[i];
203 for (std::size_t i = 0; i < D; ++i)
v[i] = T(0.0);
207 if (
this == &point)
return *
this;
208 for (std::size_t i = 0; i < D; ++i)
v[i] = point.v[i];
243 template <
typename T, std::
size_t Dimension>
249 template <
typename T>
255 template <
typename T>
262 template <
typename T, std::
size_t Dimension>
286 template <
typename T, std::
size_t Dimension>
310 template <
typename T, std::
size_t Dimension>
334 template <
typename T>
358 template <
typename T, std::
size_t Dimension>
382 template <
typename T, std::
size_t Dimension>
385 polygon(
const std::size_t initial_size = 0) : _data(initial_size) {}
393 std::vector<PointType> _data;
396 typedef typename std::vector<PointType>::iterator
iterator;
406 inline void reserve(
const std::size_t amount) { _data.reserve(amount); }
407 inline void clear()
const { _data.clear(); }
408 inline void clear() { _data.clear(); }
409 inline void erase(
const std::size_t index) {
410 _data.erase(_data.begin() + index);
412 inline std::size_t
size()
const {
return _data.size(); }
421 inline void reverse() { std::reverse(_data.begin(), _data.end()); }
425 template <
typename T>
432 template <
typename T>
439 template <
typename T, std::
size_t Dimension>
451 template <
typename T>
467 template <
typename T, std::
size_t Dimension>
492 template <
typename T, std::
size_t Dimension>
516 template <
typename T,
unsigned int Dimension, BezierType BType>
519 template <
typename T>
525 template <
typename T>
531 template <
typename T>
537 template <
typename T>
544 template <
typename T,
unsigned int Dimension, BezierType Type>
554 template <
typename T, std::
size_t Dimension>
578 template <
typename T, std::
size_t D>
581 template <
typename T>
584 vector2d(
const T& _x = T(0.0),
const T& _y = T(0.0)) {
596 template <
typename T>
599 vector3d(
const T& _x = T(0.0),
const T& _y = T(0.0),
const T& _z = T(0.0)) {
613 template <
typename T, std::
size_t D>
614 class vectornd :
public pointnd<T, D> {
631 vectornd(
const T& v0,
const T& v1,
const T& v2,
const T& v3) {
639 for (std::size_t i = 0; i < D; ++i) (*
this)[i] = vec[i];
654 template <
typename T, std::
size_t Dimension>
660 template <
typename T>
666 template <
typename T>
673 template <
typename T, std::
size_t Dimension>
687 template <
typename T, std::
size_t Dimension>
701 template <
typename T, std::
size_t Dimension>
756 template <
typename T>
762 for (std::size_t i = 0; i < 360; ++i) {
763 sin_[i] = T(
std::sin((1.0 * i) * PIDiv180));
764 cos_[i] = T(
std::cos((1.0 * i) * PIDiv180));
765 tan_[i] = T(
std::tan((1.0 * i) * PIDiv180));
769 inline const T&
sin(
const unsigned int angle)
const {
return sin_[angle]; }
770 inline const T&
cos(
const unsigned int angle)
const {
return cos_[angle]; }
771 inline const T&
tan(
const unsigned int angle)
const {
return tan_[angle]; }
790 template <
typename T>
794 return static_cast<double>(Epsilon_Medium);
798 return static_cast<float>(Epsilon_Low);
801 template <
typename T>
802 inline int orientation(
const T& x1,
const T& y1,
const T& x2,
const T& y2,
803 const T& px,
const T& py);
805 template <
typename T>
806 inline int orientation(
const T& x1,
const T& y1,
const T& z1,
const T& x2,
807 const T& y2,
const T& z2,
const T& x3,
const T& y3,
808 const T& z3,
const T& px,
const T& py,
const T& pz);
810 template <
typename T>
812 const T& y2,
const T& px,
const T& py);
814 template <
typename T>
816 const T& x2,
const T& y2,
const T& z2,
817 const T& x3,
const T& y3,
const T& z3,
818 const T& px,
const T& py,
const T& pz);
820 template <
typename T>
821 inline int orientation(
const point2d<T>& point1,
const point2d<T>& point2,
822 const T& px,
const T& py);
824 template <
typename T>
825 inline int orientation(
const point2d<T>& point1,
const point2d<T>& point2,
826 const point2d<T>& point3);
828 template <
typename T>
829 inline int orientation(
const line<T, 2>& line,
const point2d<T>& point);
831 template <
typename T>
832 inline int orientation(
const segment<T, 2>& segment,
const point2d<T>& point);
834 template <
typename T>
835 inline int orientation(
const triangle<T, 2>& triangle);
837 template <
typename T>
838 inline int orientation(
const point3d<T>& point1,
const point3d<T>& point2,
839 const point3d<T>& point3,
const T& px,
const T& py,
842 template <
typename T>
843 inline int orientation(
const point3d<T>& point1,
const point3d<T>& point2,
844 const point3d<T>& point3,
const point3d<T>& point4);
846 template <
typename T>
847 inline int orientation(
const triangle<T, 3>& triangle,
const point3d<T>& point);
849 template <
typename T>
851 const T& y2,
const T& p1x,
const T& p1y,
852 const T& p2x,
const T& p2y);
854 template <
typename T>
856 const point2d<T>& q1,
const point2d<T>& q2);
858 template <
typename T>
859 inline int in_circle(
const T& x1,
const T& y1,
const T& x2,
const T& y2,
860 const T& x3,
const T& y3,
const T& px,
const T& py);
862 template <
typename T>
863 inline int in_circle(
const point2d<T>& point1,
const point2d<T>& point2,
864 const point2d<T>& point3,
const point2d<T>& point4);
866 template <
typename T>
867 inline int in_circle(
const triangle<T, 2>& triangle,
const point2d<T>& point);
869 template <
typename T>
870 inline int in_sphere(
const T& x1,
const T& y1,
const T& z1,
const T& x2,
871 const T& y2,
const T& z2,
const T& x3,
const T& y3,
872 const T& z3,
const T& x4,
const T& y4,
const T& z4,
873 const T& px,
const T& py,
const T& pz);
875 template <
typename T>
876 inline int in_sphere(
const point3d<T>& point1,
const point3d<T>& point2,
877 const point3d<T>& point3,
const point3d<T>& point4,
878 const point2d<T>& point5);
880 template <
typename T>
881 inline int in_sphere(
const quadix<T, 3>& quadix,
const point3d<T>& point);
883 template <
typename T>
884 inline T
signed_area(
const T& x1,
const T& y1,
const T& x2,
const T& y2,
885 const T& px,
const T& py);
887 template <
typename T>
888 inline T
signed_area(
const point2d<T>& point1,
const point2d<T>& point2,
889 const T& px,
const T& py);
891 template <
typename T>
892 inline T
signed_area(
const point2d<T>& point1,
const point2d<T>& point2,
893 const point2d<T>& point3);
895 template <
typename T>
896 inline T
signed_area(
const segment<T, 2>& segment,
const point2d<T>& point);
898 template <
typename T>
899 inline T
signed_volume(
const T& x1,
const T& y1,
const T& z1,
const T& x2,
900 const T& y2,
const T& z2,
const T& x3,
const T& y3,
901 const T& z3,
const T& px,
const T& py,
const T& pz);
903 template <
typename T>
904 inline T
signed_volume(
const point3d<T>& point1,
const point3d<T>& point2,
905 const point3d<T>& point3,
const T& px,
const T& py,
908 template <
typename T>
909 inline T
signed_volume(
const point3d<T>& point1,
const point3d<T>& point2,
910 const point3d<T>& point3,
const point3d<T>& point4);
912 template <
typename T>
913 inline T
signed_volume(
const triangle<T, 3>& triangle,
const point3d<T>& point);
915 template <
typename T>
916 inline bool collinear(
const T& x1,
const T& y1,
const T& x2,
const T& y2,
917 const T& x3,
const T& y3,
const T&
epsilon = T(Epsilon));
919 template <
typename T>
920 inline bool collinear(
const T& x1,
const T& y1,
const T& z1,
const T& x2,
921 const T& y2,
const T& z2,
const T& x3,
const T& y3,
922 const T& z3,
const T&
epsilon = T(Epsilon));
924 template <
typename T>
925 inline bool collinear(
const point2d<T>& point1,
const point2d<T>& point2,
926 const point2d<T>& point3);
928 template <
typename T>
929 inline bool collinear(
const point3d<T>& point1,
const point3d<T>& point2,
930 const point3d<T>& point3);
932 template <
typename T>
933 inline bool robust_collinear(
const T& x1,
const T& y1,
const T& x2,
const T& y2,
934 const T& x3,
const T& y3,
935 const T&
epsilon = T(Epsilon));
936 template <
typename T>
937 inline bool robust_collinear(
const point2d<T>& point1,
const point2d<T>& point2,
938 const point2d<T>& point3,
939 const T&
epsilon = T(Epsilon));
941 template <
typename T>
942 inline bool robust_collinear(
const line<T, 2>& line,
const point2d<T>& point,
943 const T&
epsilon = T(Epsilon));
945 template <
typename T>
946 inline bool robust_collinear(
const line<T, 3>& line,
const point3d<T>& point,
947 const T&
epsilon = T(Epsilon));
949 template <
typename T>
950 inline bool robust_collinear(
const T& x1,
const T& y1,
const T& z1,
const T& x2,
951 const T& y2,
const T& z2,
const T& x3,
const T& y3,
952 const T& z3,
const T&
epsilon = T(Epsilon));
953 template <
typename T>
954 inline bool robust_collinear(
const point3d<T>& point1,
const point3d<T>& point2,
955 const point3d<T>& point3,
956 const T&
epsilon = T(Epsilon));
958 template <
typename T>
960 const T& y2,
const T& px,
const T& py,
961 const bool robust =
false);
962 template <
typename T>
964 const point2d<T>& point2,
965 const point2d<T>& point3,
966 const bool robust =
false);
968 template <
typename T>
970 const point2d<T>& point2,
const T& px,
971 const T& py,
const bool robust =
false);
972 template <
typename T>
974 const point2d<T>& point,
975 const bool robust =
false);
977 template <
typename T>
979 const T& x2,
const T& y2,
const T& z2,
980 const T& px,
const T& py,
const T& pz,
981 const bool robust =
false);
983 template <
typename T>
985 const point3d<T>& point2,
986 const point3d<T>& point3,
987 const bool robust =
false);
989 template <
typename T>
991 const point3d<T>& point,
992 const bool robust =
false);
994 template <
typename T>
995 inline bool robust_coplanar(
const point3d<T> point1,
const point3d<T> point2,
996 const point3d<T> point3,
const point3d<T> point4,
997 const T&
epsilon = T(Epsilon));
999 template <
typename T>
1000 inline bool coplanar(
const ray<T, 3>& ray1,
const ray<T, 3>& ray2);
1001 template <
typename T>
1002 inline bool coplanar(
const segment<T, 3>& segment1,
1003 const segment<T, 3>& segment2);
1004 template <
typename T>
1005 inline bool coplanar(
const line<T, 3>& line1,
const line<T, 3>& line2);
1006 template <
typename T>
1007 inline bool coplanar(
const triangle<T, 3>& triangle1,
1008 const triangle<T, 3>& triangle2);
1009 template <
typename T>
1010 inline bool coplanar(
const quadix<T, 3>& quadix1,
const quadix<T, 3>& quadix2);
1012 template <
typename T>
1013 inline bool cocircular(
const T& x1,
const T& y1,
const T& x2,
const T& y2,
1014 const T& x3,
const T& y3,
const T& x4,
const T& y4,
1015 const T&
epsilon = T(Epsilon));
1017 template <
typename T>
1018 inline bool cocircular(
const point2d<T>& point1,
const point2d<T>& point2,
1019 const point2d<T>& point3,
const point2d<T>& point4,
1020 const T&
epsilon = T(Epsilon));
1022 template <
typename T>
1023 inline bool cocircular(
const triangle<T, 2>& triangle,
const point2d<T>& point,
1024 const T&
epsilon = T(Epsilon));
1026 template <
typename T>
1027 inline bool cocircular(
const circle<T>& circle,
const point2d<T>& point,
1028 const T&
epsilon = T(Epsilon));
1030 template <
typename T>
1032 const T& y2,
const T& x3,
const T& y3);
1034 template <
typename T>
1036 const point2d<T>& point2,
1037 const point2d<T>& point3);
1039 template <
typename T>
1042 template <
typename T>
1043 inline bool intersect(
const T& x1,
const T& y1,
const T& x2,
const T& y2,
1044 const T& x3,
const T& y3,
const T& x4,
const T& y4);
1046 template <
typename T>
1047 inline bool intersect(
const T& x1,
const T& y1,
const T& x2,
const T& y2,
1048 const T& x3,
const T& y3,
const T& x4,
const T& y4, T& ix,
1050 template <
typename T>
1051 inline bool intersect(
const point2d<T>& point1,
const point2d<T>& point2,
1052 const point2d<T>& point3,
const point2d<T>& point4);
1054 template <
typename T>
1055 inline bool intersect(
const point2d<T>& point1,
const point2d<T>& point2,
1056 const point2d<T>& point3,
const point2d<T>& point4,
1057 point2d<T>& int_point);
1059 template <
typename T>
1060 inline bool intersect(
const segment<T, 2>& segment1,
1061 const segment<T, 2>& segment2);
1063 template <
typename T>
1064 inline bool intersect(
const segment<T, 2>& segment1,
1065 const segment<T, 2>& segment2, T& ix, T& iy);
1067 template <
typename T>
1068 inline bool intersect(
const segment<T, 2>& segment1,
1069 const segment<T, 2>& segment2, point2d<T>& i_point);
1071 template <
typename T>
1072 inline bool intersect(
const T& x1,
const T& y1,
const T& z1,
const T& x2,
1073 const T& y2,
const T& z2,
const T& x3,
const T& y3,
1074 const T& z3,
const T& x4,
const T& y4,
const T& z4,
1075 const T& fuzzy = T(0.0));
1077 template <
typename T>
1078 inline bool intersect(
const point3d<T>& point1,
const point3d<T>& point2,
1079 const point3d<T>& point3,
const point3d<T>& point4,
1080 const T& fuzzy = T(0.0));
1082 template <
typename T>
1083 inline bool intersect(
const segment<T, 3>& segment1,
1084 const segment<T, 3>& segment2,
const T& fuzzy = T(0.0));
1085 template <
typename T>
1086 inline bool intersect(
const segment<T, 2>& segment,
1087 const rectangle<T>& rectangle);
1088 template <
typename T>
1089 inline bool intersect(
const segment<T, 2>& segment,
1090 const triangle<T, 2>& triangle);
1091 template <
typename T>
1092 inline bool intersect(
const segment<T, 2>& segment,
const quadix<T, 2>& quadix);
1093 template <
typename T>
1094 inline bool intersect(
const segment<T, 2>& segment,
const line<T, 2>& line);
1095 template <
typename T>
1096 inline bool intersect(
const segment<T, 2>& segment,
const circle<T>& circle);
1097 template <
typename T>
1098 inline bool intersect(
const segment<T, 2>& segment,
1099 const quadratic_bezier<T, 2>& bezier,
1100 const std::size_t& steps = 1000);
1101 template <
typename T>
1102 inline bool intersect(
const segment<T, 2>& segment,
1103 const cubic_bezier<T, 2>& bezier,
1104 const std::size_t& steps = 1000);
1105 template <
typename T>
1106 inline bool intersect(
const segment<T, 3>& segment,
const line<T, 3>& line,
1107 const T& fuzzy = T(0.0));
1108 template <
typename T>
1109 inline bool intersect(
const segment<T, 3>& segment,
const box<T, 3>& box);
1110 template <
typename T>
1111 inline bool intersect(
const segment<T, 3>& segment,
const sphere<T>& sphere);
1112 template <
typename T>
1113 inline bool intersect(
const segment<T, 3>& segment,
const plane<T, 3>& plane);
1114 template <
typename T>
1115 inline bool intersect(
const segment<T, 3>& segment,
1116 const quadratic_bezier<T, 3>& bezier,
1117 const std::size_t& steps = 1000);
1118 template <
typename T>
1119 inline bool intersect(
const segment<T, 3>& segment,
1120 const cubic_bezier<T, 3>& bezier,
1121 const std::size_t& steps = 1000);
1122 template <
typename T>
1123 inline bool intersect(
const line<T, 2>& line,
const triangle<T, 2>& triangle);
1124 template <
typename T>
1125 inline bool intersect(
const line<T, 2>& line,
const quadix<T, 2>& quadix);
1126 template <
typename T>
1127 inline bool intersect(
const line<T, 2>& line1,
const line<T, 2>& line2);
1128 template <
typename T>
1129 inline bool intersect(
const line<T, 2>& line,
const circle<T>& circle);
1130 template <
typename T>
1131 inline bool intersect(
const line<T, 2>& line,
1132 const quadratic_bezier<T, 2>& bezier,
1133 const std::size_t& steps = 1000);
1134 template <
typename T>
1135 inline bool intersect(
const line<T, 2>& line,
const cubic_bezier<T, 2>& bezier,
1136 const std::size_t& steps = 1000);
1137 template <
typename T>
1138 inline bool intersect(
const line<T, 3>& line,
const triangle<T, 3>& triangle);
1139 template <
typename T>
1140 inline bool intersect(
const line<T, 3>& line,
const plane<T, 3>& plane);
1141 template <
typename T>
1142 inline bool intersect(
const line<T, 3>& line,
const sphere<T>& sphere);
1143 template <
typename T>
1144 inline bool intersect(
const line<T, 3>& line,
1145 const quadratic_bezier<T, 3>& bezier,
1146 const std::size_t& steps = 1000);
1147 template <
typename T>
1148 inline bool intersect(
const line<T, 3>& line,
const cubic_bezier<T, 3>& bezier,
1149 const std::size_t& steps = 1000);
1150 template <
typename T>
1151 inline bool intersect(
const triangle<T, 2>& triangle,
const circle<T>& circle);
1152 template <
typename T>
1153 inline bool intersect(
const triangle<T, 2>& triangle,
1154 const rectangle<T>& rectangle);
1155 template <
typename T>
1156 inline bool intersect(
const triangle<T, 2>& triangle,
1157 const quadratic_bezier<T, 2>& bezier,
1158 const std::size_t& steps = 1000);
1159 template <
typename T>
1160 inline bool intersect(
const triangle<T, 2>& triangle,
1161 const cubic_bezier<T, 2>& bezier,
1162 const std::size_t& steps = 1000);
1163 template <
typename T>
1164 inline bool intersect(
const rectangle<T>& rectangle1,
1165 const rectangle<T>& rectangle2);
1166 template <
typename T>
1167 inline bool intersect(
const triangle<T, 2>& triangle1,
1168 const triangle<T, 2>& triangle2);
1169 template <
typename T>
1170 inline bool intersect(
const rectangle<T>& rectangle,
const circle<T>& circle);
1171 template <
typename T>
1172 inline bool intersect(
const rectangle<T>& rectangle,
1173 const quadratic_bezier<T, 2>& bezier,
1174 const std::size_t& steps = 1000);
1175 template <
typename T>
1176 inline bool intersect(
const rectangle<T>& rectangle,
1177 const cubic_bezier<T, 2>& bezier,
1178 const std::size_t& steps = 1000);
1179 template <
typename T>
1180 inline bool intersect(
const quadix<T, 2>& quadix,
1181 const quadratic_bezier<T, 2>& bezier,
1182 const std::size_t& steps = 1000);
1183 template <
typename T>
1184 inline bool intersect(
const quadix<T, 2>& quadix,
1185 const cubic_bezier<T, 2>& bezier,
1186 const std::size_t& steps = 1000);
1187 template <
typename T>
1188 inline bool intersect(
const circle<T>& circle1,
const circle<T>& circle2);
1189 template <
typename T>
1190 inline bool intersect(
const circle<T>& circle,
1191 const quadratic_bezier<T, 2>& bezier,
1192 const std::size_t& steps = 1000);
1193 template <
typename T>
1194 inline bool intersect(
const circle<T>& circle,
const cubic_bezier<T, 2>& bezier,
1195 const std::size_t& steps = 1000);
1196 template <
typename T>
1197 inline bool intersect(
const box<T, 3>& box,
const sphere<T>& sphere);
1198 template <
typename T>
1199 inline bool intersect(
const sphere<T>& sphere1,
const sphere<T>& sphere2);
1200 template <
typename T>
1201 inline bool intersect(
const sphere<T>& sphere,
1202 const quadratic_bezier<T, 3>& bezier,
1203 const std::size_t& steps = 1000);
1204 template <
typename T>
1205 inline bool intersect(
const sphere<T>& sphere,
const cubic_bezier<T, 3>& bezier,
1206 const std::size_t& steps = 1000);
1207 template <
typename T>
1208 inline bool intersect(
const ray<T, 2>& ray1,
const ray<T, 2>& ray2);
1209 template <
typename T>
1210 inline bool intersect(
const ray<T, 3>& ray1,
const ray<T, 3>& ray2);
1211 template <
typename T>
1212 inline bool intersect(
const ray<T, 2>& ray,
const segment<T, 2>& segment);
1213 template <
typename T>
1214 inline bool intersect(
const ray<T, 3>& ray,
const segment<T, 3>& segment);
1215 template <
typename T>
1216 inline bool intersect(
const ray<T, 2>& ray,
const rectangle<T>& rectangle);
1217 template <
typename T>
1218 inline bool intersect(
const ray<T, 3>& ray,
const box<T, 3>& box);
1219 template <
typename T>
1220 inline bool intersect(
const ray<T, 2>& ray,
const triangle<T, 2>& triangle);
1221 template <
typename T>
1222 inline bool intersect(
const ray<T, 3>& ray,
const triangle<T, 3>& triangle);
1223 template <
typename T>
1224 inline bool intersect(
const ray<T, 2>& ray,
const quadix<T, 2>& quadix);
1225 template <
typename T>
1226 inline bool intersect(
const ray<T, 2>& ray,
const circle<T>& circle);
1227 template <
typename T>
1228 inline bool intersect(
const ray<T, 3>& ray,
const sphere<T>& sphere);
1229 template <
typename T>
1230 inline bool intersect(
const ray<T, 3>& ray,
const plane<T, 3>& plane);
1231 template <
typename T>
1232 inline bool intersect(
const ray<T, 2>& ray,
const polygon<T, 2>& polygon);
1233 template <
typename T>
1234 inline bool intersect(
const plane<T, 3>& plane1,
const plane<T, 3>& plane2);
1235 template <
typename T>
1236 inline bool intersect(
const plane<T, 3>& plane,
const sphere<T>& sphere);
1237 template <
typename T>
1238 inline bool intersect(
const plane<T, 3>& plane,
const line<T, 3>& line);
1240 template <
typename T>
1241 inline bool simple_intersect(
const T& x1,
const T& y1,
const T& x2,
const T& y2,
1242 const T& x3,
const T& y3,
const T& x4,
1245 template <
typename T>
1246 inline bool simple_intersect(
const point2d<T>& point1,
const point2d<T>& point2,
1247 const point2d<T>& point3,
1248 const point2d<T>& point4);
1250 template <
typename T>
1252 const segment<T, 2>& segment2);
1254 template <
typename T>
1256 const segment<T, 2>& segment2);
1257 template <
typename T>
1259 const segment<T, 2>& segment2);
1260 template <
typename T>
1262 const segment<T, 2>& segment2);
1264 template <
typename T>
1266 const T& y2,
const T& x3,
const T& y3,
1267 const T& x4,
const T& y4, T& ix, T& iy);
1269 template <
typename T>
1271 const point2d<T>& point2,
1272 const point2d<T>& point3,
1273 const point2d<T>& point4, T& ix, T& iy);
1275 template <
typename T>
1277 const point2d<T>& point2,
1278 const point2d<T>& point3,
1279 const point2d<T>& point4);
1280 template <
typename T>
1282 const segment<T, 2>& segment2);
1284 template <
typename T>
1286 const T& x2,
const T& y2,
const T& z2,
1287 const T& x3,
const T& y3,
const T& z3,
1288 const T& x4,
const T& y4,
const T& z4, T& ix,
1289 T& iy, T& iz,
const T& fuzzy = T(0.0));
1291 template <
typename T>
1293 const point3d<T>& point2,
1294 const point3d<T>& point3,
1295 const point3d<T>& point4, T& ix, T& iy, T& iz,
1296 const T& fuzzy = T(0.0));
1298 template <
typename T>
1300 const point3d<T>& point2,
1301 const point3d<T>& point3,
1302 const point3d<T>& point4,
1303 const T& fuzzy = T(0.0));
1305 template <
typename T>
1307 const segment<T, 3>& segment2,
1308 const T& fuzzy = T(0.0));
1310 template <
typename T>
1312 const line<T, 2>& line);
1314 template <
typename T>
1316 const line<T, 3>& line,
1317 const T& fuzzy = T(0.0));
1319 template <
typename T>
1321 const plane<T, 3>& plane);
1323 template <
typename T,
typename OutputIterator>
1325 const quadratic_bezier<T, 2>& bezier,
1327 const std::size_t& steps = 1000);
1329 template <
typename T,
typename OutputIterator>
1331 const cubic_bezier<T, 2>& bezier,
1333 const std::size_t& steps = 1000);
1335 template <
typename T,
typename OutputIterator>
1337 const quadratic_bezier<T, 3>& bezier,
1339 const std::size_t& steps = 1000);
1341 template <
typename T,
typename OutputIterator>
1343 const cubic_bezier<T, 3>& bezier,
1345 const std::size_t& steps = 1000);
1347 template <
typename T>
1349 const line<T, 2>& line2);
1351 template <
typename T>
1353 const line<T, 3>& line2,
1354 const T& fuzzy = T(0.0));
1356 template <
typename T>
1358 const circle<T>& circle2, point2d<T>& point1,
1359 point2d<T>& point2);
1361 template <
typename T,
typename OutputIterator>
1363 const triangle<T, 2>& triangle,
1364 OutputIterator out);
1366 template <
typename T>
1368 const triangle<T, 3>& triangle,
1369 point3d<T>& ipoint);
1371 template <
typename T>
1373 const plane<T, 3>& plane);
1375 template <
typename T,
typename OutputIterator>
1377 const T& y2,
const T& cx,
const T& cy,
1378 const T& radius, OutputIterator out);
1380 template <
typename T,
typename OutputIterator>
1382 const circle<T>& circle, OutputIterator out);
1384 template <
typename T,
typename OutputIterator>
1386 OutputIterator out);
1388 template <
typename T,
typename OutputIterator>
1390 const sphere<T>& sphere, OutputIterator out);
1392 template <
typename T,
typename OutputIterator>
1394 OutputIterator out);
1396 template <
typename T>
1398 const ray<T, 2>& ray2);
1400 template <
typename T>
1402 const triangle<T, 3>& triangle);
1404 template <
typename T>
1406 const plane<T, 3>& plane);
1408 template <
typename T,
typename OutputIterator>
1410 OutputIterator out);
1412 template <
typename T,
typename OutputIterator>
1414 OutputIterator out);
1416 template <
typename T>
1418 const T& x1,
const T& y1,
const T& z1,
const T& x2,
const T& y2,
1419 const T& z2,
const T& x3,
const T& y3,
const T& z3,
const T& x4,
1420 const T& y4,
const T& z4, T& Ix, T& Iy, T& Iz,
const T& fuzzy = T(0.0));
1422 template <
typename T>
1425 template <
typename T>
1428 template <
typename T>
1431 template <
typename T>
1432 inline unsigned int quadrant(
const T& angle);
1434 template <
typename T>
1435 inline unsigned int quadrant(
const T& x,
const T& y);
1437 template <
typename T>
1438 inline unsigned int quadrant(
const point2d<T>& point);
1440 template <
typename T>
1441 inline T
vertex_angle(
const T& x1,
const T& y1,
const T& x2,
const T& y2,
1442 const T& x3,
const T& y3);
1444 template <
typename T>
1445 inline T
vertex_angle(
const point2d<T>& point1,
const point2d<T>& point2,
1446 const point2d<T>& point3);
1448 template <
typename T>
1449 inline T
vertex_angle(
const T& x1,
const T& y1,
const T& z1,
const T& x2,
1450 const T& y2,
const T& z2,
const T& x3,
const T& y3,
1453 template <
typename T>
1454 inline T
vertex_angle(
const point3d<T>& point1,
const point3d<T>& point2,
1455 const point3d<T>& point3);
1457 template <
typename T>
1459 const T& y2,
const T& x3,
const T& y3,
1461 template <
typename T>
1463 const point2d<T>& point2,
1464 const point2d<T>& point3,
1466 template <
typename T>
1469 template <
typename T>
1472 template <
typename T>
1475 template <
typename T>
1478 template <
typename T>
1479 inline T
cartesian_angle(
const T& x,
const T& y,
const T& ox,
const T& oy);
1481 template <
typename T>
1482 inline T
cartesian_angle(
const point2d<T>& point,
const point2d<T>& origin);
1484 template <
typename T>
1488 template <
typename T>
1490 const point2d<T>& origin);
1492 template <
typename T>
1493 inline bool parallel(
const T& x1,
const T& y1,
const T& x2,
const T& y2,
1494 const T& x3,
const T& y3,
const T& x4,
const T& y4,
1495 const T&
epsilon = T(Epsilon));
1497 template <
typename T>
1498 inline bool parallel(
const point2d<T>& point1,
const point2d<T>& point2,
1499 const point2d<T>& point3,
const point2d<T>& point4,
1500 const T&
epsilon = T(Epsilon));
1502 template <
typename T>
1503 inline bool parallel(
const segment<T, 2>& segment1,
1504 const segment<T, 2>& segment2,
1505 const T&
epsilon = T(Epsilon));
1507 template <
typename T>
1508 inline bool parallel(
const line<T, 2>& line1,
const line<T, 2>& line2,
1509 const T&
epsilon = T(Epsilon));
1511 template <
typename T>
1512 inline bool parallel(
const T& x1,
const T& y1,
const T& z1,
const T& x2,
1513 const T& y2,
const T& z2,
const T& x3,
const T& y3,
1514 const T& z3,
const T& x4,
const T& y4,
const T& z4,
1515 const T&
epsilon = T(Epsilon));
1517 template <
typename T>
1518 inline bool parallel(
const point3d<T>& point1,
const point3d<T>& point2,
1519 const point3d<T>& point3,
const point3d<T>& point4,
1520 const T&
epsilon = T(Epsilon));
1522 template <
typename T>
1523 inline bool parallel(
const segment<T, 3>& segment1,
1524 const segment<T, 3>& segment2,
1525 const T&
epsilon = T(Epsilon));
1527 template <
typename T>
1528 inline bool parallel(
const line<T, 3>& line1,
const line<T, 3>& line2,
1529 const T&
epsilon = T(Epsilon));
1531 template <
typename T>
1532 inline bool robust_parallel(
const T& x1,
const T& y1,
const T& x2,
const T& y2,
1533 const T& x3,
const T& y3,
const T& x4,
const T& y4,
1534 const T&
epsilon = T(Epsilon));
1536 template <
typename T>
1537 inline bool robust_parallel(
const point2d<T>& point1,
const point2d<T>& point2,
1538 const point2d<T>& point3,
const point2d<T>& point4,
1539 const T&
epsilon = T(Epsilon));
1541 template <
typename T>
1543 const segment<T, 2>& segment2,
1544 const T&
epsilon = T(Epsilon));
1546 template <
typename T>
1547 inline bool robust_parallel(
const line<T, 2>& line1,
const line<T, 2>& line2,
1548 const T&
epsilon = T(Epsilon));
1550 template <
typename T>
1552 const segment<T, 2>& segment,
1553 const T&
epsilon = T(Epsilon));
1555 template <
typename T>
1556 inline bool robust_parallel(
const T& x1,
const T& y1,
const T& z1,
const T& x2,
1557 const T& y2,
const T& z2,
const T& x3,
const T& y3,
1558 const T& z3,
const T& x4,
const T& y4,
const T& z4,
1559 const T&
epsilon = T(Epsilon));
1561 template <
typename T>
1562 inline bool robust_parallel(
const point3d<T>& point1,
const point3d<T>& point2,
1563 const point3d<T>& point3,
const point3d<T>& point4,
1564 const T&
epsilon = T(Epsilon));
1566 template <
typename T>
1568 const segment<T, 3>& segment2,
1569 const T&
epsilon = T(Epsilon));
1571 template <
typename T>
1572 inline bool robust_parallel(
const line<T, 3>& line1,
const line<T, 3>& line2,
1573 const T&
epsilon = T(Epsilon));
1575 template <
typename T>
1577 const segment<T, 3>& segment,
1578 const T&
epsilon = T(Epsilon));
1580 template <
typename T>
1581 inline bool perpendicular(
const T& x1,
const T& y1,
const T& x2,
const T& y2,
1582 const T& x3,
const T& y3,
const T& x4,
const T& y4,
1583 const T&
epsilon = T(Epsilon));
1585 template <
typename T>
1586 inline bool perpendicular(
const point2d<T>& point1,
const point2d<T>& point2,
1587 const point2d<T>& point3,
const point2d<T>& point4,
1588 const T&
epsilon = T(Epsilon));
1590 template <
typename T>
1592 const segment<T, 2>& segment2,
1593 const T&
epsilon = T(Epsilon));
1595 template <
typename T>
1596 inline bool perpendicular(
const line<T, 2>& line1,
const line<T, 2>& line2,
1597 const T&
epsilon = T(Epsilon));
1599 template <
typename T>
1600 inline bool perpendicular(
const line<T, 2>& line,
const segment<T, 2>& segment,
1601 const T&
epsilon = T(Epsilon));
1603 template <
typename T>
1604 inline bool perpendicular(
const T& x1,
const T& y1,
const T& z1,
const T& x2,
1605 const T& y2,
const T& z2,
const T& x3,
const T& y3,
1606 const T& z3,
const T& x4,
const T& y4,
const T& z4,
1607 const T&
epsilon = T(Epsilon));
1609 template <
typename T>
1610 inline bool perpendicular(
const point3d<T>& point1,
const point3d<T>& point2,
1611 const point3d<T>& point3,
const point3d<T>& point4,
1612 const T&
epsilon = T(Epsilon));
1614 template <
typename T>
1616 const segment<T, 3>& segment2,
1617 const T&
epsilon = T(Epsilon));
1619 template <
typename T>
1620 inline bool perpendicular(
const line<T, 3>& line1,
const line<T, 3>& line2,
1621 const T&
epsilon = T(Epsilon));
1623 template <
typename T>
1625 const T& y2,
const T& x3,
const T& y3,
1626 const T& x4,
const T& y4,
1627 const T&
epsilon = T(Epsilon));
1629 template <
typename T>
1631 const point2d<T>& point2,
1632 const point2d<T>& point3,
1633 const point2d<T>& point4,
1634 const T&
epsilon = T(Epsilon));
1636 template <
typename T>
1638 const segment<T, 2>& segment2,
1639 const T&
epsilon = T(Epsilon));
1641 template <
typename T>
1643 const line<T, 2>& line2,
1644 const T&
epsilon = T(Epsilon));
1646 template <
typename T>
1648 const T& x2,
const T& y2,
const T& z2,
1649 const T& x3,
const T& y3,
const T& z3,
1650 const T& x4,
const T& y4,
const T& z4,
1651 const T&
epsilon = T(Epsilon));
1653 template <
typename T>
1655 const point3d<T>& point2,
1656 const point3d<T>& point3,
1657 const point3d<T>& point4,
1658 const T&
epsilon = T(Epsilon));
1660 template <
typename T>
1662 const segment<T, 3>& segment2,
1663 const T&
epsilon = T(Epsilon));
1665 template <
typename T>
1667 const line<T, 3>& line2,
1668 const T&
epsilon = T(Epsilon));
1670 template <
typename T>
1672 const segment<T, 2>& segment,
1673 const T&
epsilon = T(Epsilon));
1675 template <
typename T>
1677 const T& y2,
const T& x3,
const T& y3,
1678 const T& x4,
const T& y4);
1679 template <
typename T>
1681 const line<T, 2>& line2);
1683 template <
typename T>
1685 const T& x2,
const T& y2,
1686 const T& x3,
const T& y3,
1687 const T& x4,
const T& y4);
1689 template <
typename T>
1691 const rectangle<T>& rectangle2);
1693 template <
typename T>
1695 const T& x2,
const T& y2,
const T& z2,
1696 const T& x3,
const T& y3,
const T& z3,
1697 const T& x4,
const T& y4,
const T& z4);
1699 template <
typename T>
1702 template <
typename T,
unsigned int Dimension,
typename Simplex,
typename Bezier>
1704 const Bezier& bezier,
1705 const std::size_t& steps);
1707 template <
typename T,
unsigned int Dimension,
typename Bezier,
1710 const Iterator& end,
1711 const Bezier& bezier,
1712 const std::size_t& steps);
1714 template <
typename T>
1716 const T& y2,
const T& x3,
const T& y3,
1717 const T& x4,
const T& y4);
1719 template <
typename T>
1721 const rectangle<T>& rectangle2);
1723 template <
typename T>
1724 inline bool box_within_box(
const T& x1,
const T& y1,
const T& z1,
const T& x2,
1725 const T& y2,
const T& z2,
const T& x3,
const T& y3,
1726 const T& z3,
const T& x4,
const T& y4,
const T& z4);
1728 template <
typename T>
1729 inline bool box_within_box(
const box<T, 3>& box1,
const box<T, 3>& box2);
1731 template <
typename T>
1733 const T& x1,
const T& y1,
const T& x2,
1736 template <
typename T>
1738 const rectangle<T>& rectangle);
1740 template <
typename T>
1742 const T& y2,
const T& x3,
const T& y3,
1743 const T& x4,
const T& y4,
const T& x5,
1745 template <
typename T>
1747 const rectangle<T>& rectangle);
1749 template <
typename T>
1751 const T& y2,
const T& x3,
const T& y3,
1752 const T& x4,
const T& y4);
1754 template <
typename T>
1756 const rectangle<T>& rectangle);
1758 template <
typename T>
1760 const T& y2,
const T& x3,
const T& y3,
1761 const T& x4,
const T& y4,
const T& x5,
1762 const T& y5,
const T& x6,
const T& y6);
1764 template <
typename T>
1766 const rectangle<T>& rectangle);
1768 template <
typename T>
1770 const rectangle<T>& rectangle);
1772 template <
typename T>
1774 const T& radius,
const T& x1,
const T& y1,
1775 const T& z1,
const T& x2,
const T& y2,
1778 template <
typename T>
1781 template <
typename T>
1783 const T& x2,
const T& y2,
const T& z2,
1784 const T& x3,
const T& y3,
const T& z3,
1785 const T& x4,
const T& y4,
const T& z4,
1786 const T& x5,
const T& y5,
const T& z5);
1787 template <
typename T>
1789 const box<T, 3>& box);
1791 template <
typename T>
1793 const T& x2,
const T& y2,
const T& z2,
1794 const T& x3,
const T& y3,
const T& z3,
1795 const T& x4,
const T& y4,
const T& z4);
1797 template <
typename T>
1799 const box<T, 3>& box);
1801 template <
typename T>
1803 const T& x2,
const T& y2,
const T& z2,
1804 const T& x3,
const T& y3,
const T& z3,
1805 const T& x4,
const T& y4,
const T& z4,
1806 const T& x5,
const T& y5,
const T& z5,
1807 const T& x6,
const T& y6,
const T& z6);
1809 template <
typename T>
1810 inline bool quadix_within_box(
const quadix<T, 3>& quadix,
const box<T, 3>& box);
1812 template <
typename T>
1814 const box<T, 3>& box);
1816 template <
typename T>
1818 const circle<T>& circle2);
1820 template <
typename T>
1821 inline bool is_tangent(
const segment<T, 2>& segment,
const circle<T>& circle);
1823 template <
typename T>
1825 const T& sy2,
const T& p1x,
const T& p1y,
1826 const T& p2x,
const T& p2y, T& rpx, T& rpy);
1827 template <
typename T>
1829 const point2d<T>& point1,
1830 const point2d<T>& point2,
1831 point2d<T>& reflection_point);
1833 template <
typename T>
1834 inline segment<T, 2>
edge(
const triangle<T, 2>& triangle,
1835 const std::size_t& edge_index);
1836 template <
typename T>
1837 inline segment<T, 3>
edge(
const triangle<T, 3>& triangle,
1838 const std::size_t& edge_index);
1839 template <
typename T>
1840 inline segment<T, 2>
edge(
const quadix<T, 2>& quadix,
1841 const std::size_t& edge_index);
1842 template <
typename T>
1843 inline segment<T, 3>
edge(
const quadix<T, 3>& quadix,
1844 const std::size_t& edge_index);
1845 template <
typename T>
1846 inline segment<T, 2>
edge(
const rectangle<T>& rectangle,
1847 const std::size_t&
edge);
1848 template <
typename T>
1849 inline segment<T, 2>
edge(
const polygon<T, 2>& polygon,
1850 const std::size_t&
edge);
1851 template <
typename T>
1852 inline segment<T, 3>
edge(
const polygon<T, 3>& polygon,
1853 const std::size_t&
edge);
1855 template <
typename T>
1856 inline segment<T, 2>
opposing_edge(
const triangle<T, 2>& triangle,
1857 const std::size_t& corner);
1858 template <
typename T>
1859 inline segment<T, 3>
opposing_edge(
const triangle<T, 3>& triangle,
1860 const std::size_t& corner);
1862 template <
typename T>
1864 template <
typename T>
1867 template <
typename T>
1869 const std::size_t& corner_index);
1870 template <
typename T>
1871 inline point3d<T>
box_corner(
const box<T, 3>& box,
1872 const std::size_t& corner_index);
1874 template <
typename T>
1876 const std::size_t& bisector);
1877 template <
typename T>
1879 const std::size_t& bisector);
1881 template <
typename T>
1883 const triangle<T, 2>& triangle,
const std::size_t& corner,
1884 const std::size_t& opposing_corner);
1886 template <
typename T>
1888 const triangle<T, 3>& triangle,
const std::size_t& corner,
1889 const std::size_t& opposing_corner);
1891 template <
typename T>
1893 const std::size_t& median);
1894 template <
typename T>
1896 const std::size_t& median);
1898 template <
typename T>
1900 const std::size_t& symmedian);
1901 template <
typename T>
1903 const std::size_t& symmedian);
1905 template <
typename T>
1906 inline line<T, 2>
euler_line(
const triangle<T, 2>& triangle);
1907 template <
typename T>
1908 inline line<T, 3>
euler_line(
const triangle<T, 3>& triangle);
1910 template <
typename T>
1912 const std::size_t& corner);
1913 template <
typename T>
1915 const std::size_t& corner);
1917 template <
typename T>
1920 template <
typename T>
1922 const point2d<T>& point,
1923 const std::size_t& median);
1925 template <
typename T>
1927 const point3d<T>& point,
1928 const std::size_t& median);
1930 template <
typename T>
1932 const point2d<T>& point);
1933 template <
typename T>
1935 const point3d<T>& point);
1937 template <
typename T>
1939 const point2d<T>& point);
1940 template <
typename T>
1942 const point3d<T>& point);
1944 template <
typename T>
1946 const T& y1,
const T& x2,
const T& y2);
1948 template <
typename T>
1950 const T& y1,
const T& x2,
const T& y2);
1952 template <
typename T>
1954 const rectangle<T>& rectangle);
1956 template <
typename T>
1958 const rectangle<T>& rectangle);
1960 template <
typename T>
1962 const point2d<T>& rect_point1,
1963 point2d<T>& rect_point2);
1965 template <
typename T>
1967 const segment<T, 2>& segment);
1969 template <
typename T>
1970 inline bool point_in_box(
const T& px,
const T& py,
const T& pz,
const T& x1,
1971 const T& y1,
const T& z1,
const T& x2,
const T& y2,
1974 template <
typename T>
1975 inline bool point_in_box(
const point3d<T>& point,
const T& x1,
const T& y1,
1976 const T& z1,
const T& x2,
const T& y2,
const T& z2);
1978 template <
typename T>
1979 inline bool point_in_box(
const T& px,
const T& py,
const T& pz,
1980 const box<T, 3>& box);
1982 template <
typename T>
1983 inline bool point_in_box(
const point3d<T>& point,
const box<T, 3>& box);
1985 template <
typename T>
1986 inline bool point_in_box(
const point3d<T>& point,
const point3d<T>& box_point1,
1987 const point3d<T>& box_point2);
1989 template <
typename T>
1990 inline bool point_in_box(
const point3d<T>& point,
const segment<T, 3>& segment);
1992 template <
typename T>
1994 const T& y1,
const T& x2,
const T& y2,
1995 const T& x3,
const T& y3);
1996 template <
typename T>
1997 inline bool point_in_triangle(
const point2d<T>& point,
const point2d<T>& point1,
1998 const point2d<T>& point2,
1999 const point2d<T>& point3);
2001 template <
typename T>
2003 const triangle<T, 2>& triangle);
2005 template <
typename T>
2007 const triangle<T, 2>& triangle);
2009 template <
typename T>
2010 inline bool point_in_quadix(
const T& px,
const T& py,
const T& x1,
const T& y1,
2011 const T& x2,
const T& y2,
const T& x3,
const T& y3,
2012 const T& x4,
const T& y4);
2014 template <
typename T>
2015 inline bool point_in_quadix(
const point2d<T>& point,
const point2d<T>& point1,
2016 const point2d<T>& point2,
const point2d<T>& point3,
2017 const point2d<T>& point4);
2019 template <
typename T>
2021 const quadix<T, 2>& quadix);
2022 template <
typename T>
2024 const quadix<T, 2>& quadix);
2026 template <
typename T>
2027 inline bool point_in_circle(
const T& px,
const T& py,
const T& cx,
const T& cy,
2030 template <
typename T>
2031 inline bool point_in_circle(
const T& px,
const T& py,
const circle<T>& circle);
2033 template <
typename T>
2034 inline bool point_in_circle(
const point2d<T>& point,
const circle<T>& circle);
2036 template <
typename T>
2037 inline bool point_in_sphere(
const T& px,
const T& py,
const T& pz,
const T& cx,
2038 const T& cy,
const T& cz,
const T& radius);
2040 template <
typename T>
2042 const sphere<T>& sphere);
2044 template <
typename T>
2045 inline bool point_in_sphere(
const point3d<T>& point,
const sphere<T>& sphere);
2047 template <
typename T>
2049 const T& y1,
const T& x2,
const T& y2,
2050 const T& x3,
const T& y3);
2052 template <
typename T>
2054 const point2d<T>& point1,
2055 const point2d<T>& point2,
2056 const point2d<T>& point3);
2058 template <
typename T>
2060 const triangle<T, 2> triangle);
2062 template <
typename T>
2064 const T& y1,
const T& x2,
const T& y2,
2065 const T& x3,
const T& y3);
2066 template <
typename T>
2068 const point2d<T>& point1,
2069 const point2d<T>& point2,
2070 const point2d<T>& point3);
2072 template <
typename T>
2074 const segment<T, 2>& segment);
2076 template <
typename T>
2078 const segment<T, 3>& segment);
2080 template <
typename T>
2081 inline bool point_on_ray(
const T& px,
const T& py,
const T& ox,
const T& oy,
2082 const T& dx,
const T& dy);
2084 template <
typename T>
2085 inline bool point_on_ray(
const T& px,
const T& py,
const T& pz,
const T& ox,
2086 const T& oy,
const T& oz,
const T& dx,
const T& dy,
2089 template <
typename T>
2090 inline bool point_on_ray(
const point2d<T>& point,
const ray<T, 2>& ray);
2092 template <
typename T>
2093 inline bool point_on_ray(
const point3d<T>& point,
const ray<T, 3>& ray);
2095 template <
typename T>
2097 const T& y1,
const T& x2,
const T& y2);
2099 template <
typename T>
2101 const T& y1,
const T& x2,
const T& y2);
2103 template <
typename T>
2105 const rectangle<T>& rectangle);
2107 template <
typename T>
2109 const rectangle<T>& rectangle);
2111 template <
typename T>
2113 const T& y1,
const T& x2,
const T& y2,
2114 const T& x3,
const T& y3);
2115 template <
typename T>
2116 inline bool point_on_triangle(
const point2d<T>& point,
const point2d<T>& point1,
2117 const point2d<T>& point2,
2118 const point2d<T>& point3);
2120 template <
typename T>
2122 const triangle<T, 2>& triangle);
2124 template <
typename T>
2126 const triangle<T, 2>& triangle);
2128 template <
typename T>
2129 inline bool point_on_quadix(
const T& px,
const T& py,
const T& x1,
const T& y1,
2130 const T& x2,
const T& y2,
const T& x3,
const T& y3,
2131 const T& x4,
const T& y4);
2133 template <
typename T>
2134 inline bool point_on_quadix(
const point2d<T>& point,
const point2d<T>& point1,
2135 const point2d<T>& point2,
const point2d<T>& point3,
2136 const point2d<T>& point4);
2138 template <
typename T>
2140 const quadix<T, 2>& quadix);
2141 template <
typename T>
2143 const quadix<T, 2>& quadix);
2145 template <
typename T>
2146 inline bool point_on_circle(
const T& px,
const T& py,
const T& cx,
const T& cy,
2149 template <
typename T>
2150 inline bool point_on_circle(
const T& px,
const T& py,
const circle<T>& circle);
2152 template <
typename T>
2153 inline bool point_on_circle(
const point2d<T>& point,
const circle<T>& circle);
2155 template <
typename T>
2157 const quadratic_bezier<T, 2>& bezier,
2158 const std::size_t& steps = 1000,
2159 const T& fuzzy = T(Epsilon));
2161 template <
typename T>
2163 const cubic_bezier<T, 2>& bezier,
2164 const std::size_t& steps = 1000,
2165 const T& fuzzy = T(Epsilon));
2167 template <
typename T>
2169 const quadratic_bezier<T, 3>& bezier,
2170 const std::size_t& steps = 1000,
2171 const T& fuzzy = T(Epsilon));
2173 template <
typename T>
2175 const cubic_bezier<T, 3>& bezier,
2176 const std::size_t& steps = 1000,
2177 const T& fuzzy = T(Epsilon));
2179 template <
typename T>
2181 const triangle<T, 2>& triangle);
2183 template <
typename T>
2185 const triangle<T, 3>& triangle);
2187 template <
typename T>
2189 const triangle<T, 2>& triangle);
2191 template <
typename T>
2194 template <
typename T>
2197 template <
typename T>
2199 const T& y2, T& x3, T& y3);
2201 template <
typename T>
2203 const point2d<T>& point2,
2204 point2d<T>& point3);
2206 template <
typename T>
2208 const T& x2,
const T& y2);
2210 template <
typename T>
2212 const point2d<T>& point2);
2214 template <
typename T>
2216 const T& side_length);
2217 template <
typename T>
2219 const point2d<T>& center_point,
const T& side_length);
2221 template <
typename T>
2223 const point2d<T>& point2,
2225 template <
typename T>
2229 template <
typename T>
2231 const point2d<T>& point2,
const T& angle1,
2233 template <
typename T>
2235 const T& angle1,
const T& angle2);
2237 template <
typename T>
2240 template <
typename T>
2242 const point2d<T>& point);
2243 template <
typename T>
2245 const point3d<T>& point);
2247 template <
typename T>
2249 const point2d<T>& point);
2250 template <
typename T>
2252 const point3d<T>& point);
2254 template <
typename T>
2256 const triangle<T, 2>& triangle);
2257 template <
typename T>
2259 const triangle<T, 3>& triangle);
2261 template <
typename T>
2263 const triangle<T, 2>& triangle);
2265 template <
typename T>
2267 const triangle<T, 2>& triangle);
2269 template <
typename T>
2271 const triangle<T, 2>& triangle);
2273 template <
typename T>
2275 const triangle<T, 2>& triangle);
2277 template <
typename T>
2279 template <
typename T>
2282 template <
typename T>
2284 template <
typename T>
2287 template <
typename T>
2289 const point2d<T>& point);
2291 template <
typename T>
2293 template <
typename T>
2296 template <
typename T>
2298 const triangle<T, 2>& triangle);
2299 template <
typename T>
2301 const triangle<T, 3>& triangle);
2303 template <
typename T>
2305 const triangle<T, 2>& triangle);
2307 template <
typename T>
2309 template <
typename T>
2312 template <
typename T>
2314 template <
typename T>
2317 template <
typename T>
2320 template <
typename T>
2322 template <
typename T>
2325 template <
typename T>
2328 template <
typename T>
2330 const triangle<T, 2>& triangle,
const point2d<T>& point);
2332 template <
typename T>
2334 const triangle<T, 2>& triangle);
2336 template <
typename T>
2338 const triangle<T, 2>& triangle);
2340 template <
typename T>
2346 template <
typename T>
2348 const T& y2, T& x3, T& y3, T& x4, T& y4);
2350 template <
typename T>
2352 const point2d<T>& point2,
2353 point2d<T>& point3, point2d<T>& point4);
2355 template <
typename T>
2357 const T& x2,
const T& y2);
2359 template <
typename T>
2361 const point2d<T>& point2);
2363 template <
typename T>
2366 template <
typename T>
2368 const T& side_length);
2370 template <
typename T>
2372 const T& side_length);
2374 template <
typename T>
2375 inline void torricelli_point(
const T& x1,
const T& y1,
const T& x2,
const T& y2,
2376 const T& x3,
const T& y3, T& px, T& py);
2378 template <
typename T>
2380 const point2d<T>& point2,
2381 const point2d<T>& point3);
2383 template <
typename T>
2386 template <
typename T>
2387 inline bool trilateration(
const T& c0x,
const T& c0y,
const T& c0r,
2388 const T& c1x,
const T& c1y,
const T& c1r,
2389 const T& c2x,
const T& c2y,
const T& c2r, T& px,
2392 template <
typename T>
2393 inline point2d<T>
trilateration(
const circle<T>& c0,
const circle<T>& c1,
2394 const circle<T>& c2);
2396 template <
typename T>
2397 inline void incenter(
const T& x1,
const T& y1,
const T& x2,
const T& y2,
2398 const T& x3,
const T& y3, T& px, T& py);
2400 template <
typename T>
2401 inline void incenter(
const T& x1,
const T& y1,
const T& z1,
const T& x2,
2402 const T& y2,
const T& z2,
const T& x3,
const T& y3,
2403 const T& z3, T& px, T& py, T& pz);
2405 template <
typename T>
2406 inline point2d<T>
incenter(
const point2d<T>& point1,
const point2d<T>& point2,
2407 const point2d<T>& point3);
2409 template <
typename T>
2410 inline point3d<T>
incenter(
const point3d<T>& point1,
const point3d<T>& point2,
2411 const point3d<T>& point3);
2413 template <
typename T>
2414 inline point2d<T>
incenter(
const triangle<T, 2>& triangle);
2416 template <
typename T>
2417 inline point3d<T>
incenter(
const triangle<T, 3>& triangle);
2419 template <
typename T>
2420 inline void circumcenter(
const T& x1,
const T& y1,
const T& x2,
const T& y2,
2421 const T& x3,
const T& y3, T& px, T& py);
2423 template <
typename T>
2424 inline void circumcenter(
const T& x1,
const T& y1,
const T& z1,
const T& x2,
2425 const T& y2,
const T& z2,
const T& x3,
const T& y3,
2426 const T& z3, T& px, T& py, T& pz);
2428 template <
typename T>
2429 inline point2d<T>
circumcenter(
const point2d<T>& point1,
2430 const point2d<T>& point2,
2431 const point2d<T>& point3);
2433 template <
typename T>
2434 inline point3d<T>
circumcenter(
const point3d<T>& point1,
2435 const point3d<T>& point2,
2436 const point3d<T>& point3);
2438 template <
typename T>
2439 inline point2d<T>
circumcenter(
const triangle<T, 2>& triangle);
2441 template <
typename T>
2442 inline point3d<T>
circumcenter(
const triangle<T, 3>& triangle);
2444 template <
typename T>
2445 inline circle<T>
circumcircle(
const T& x1,
const T& y1,
const T& x2,
2446 const T& y2,
const T& x3,
const T& y3);
2448 template <
typename T>
2449 inline circle<T>
circumcircle(
const point2d<T>& point1,
2450 const point2d<T>& point2,
2451 const point2d<T>& point3);
2453 template <
typename T>
2454 inline circle<T>
circumcircle(
const triangle<T, 2>& triangle);
2456 template <
typename T>
2457 inline sphere<T>
circumsphere(
const T& x1,
const T& y1,
const T& z1,
2458 const T& x2,
const T& y2,
const T& z2,
2459 const T& x3,
const T& y3,
const T& z3);
2461 template <
typename T>
2462 inline sphere<T>
circumsphere(
const point3d<T>& point1,
2463 const point3d<T>& point2,
2464 const point3d<T>& point3);
2466 template <
typename T>
2467 inline sphere<T>
circumsphere(
const triangle<T, 3>& triangle);
2469 template <
typename T>
2471 const T& y2,
const T& x3,
const T& y3);
2473 template <
typename T>
2475 const point2d<T>& point2,
2476 const point2d<T>& point3);
2478 template <
typename T>
2481 template <
typename T>
2483 const T& x2,
const T& y2,
const T& z2,
2484 const T& x3,
const T& y3,
const T& z3);
2486 template <
typename T>
2488 const point3d<T>& point2,
2489 const point3d<T>& point3);
2491 template <
typename T>
2494 template <
typename T>
2496 const T& y2,
const T& x3,
const T& y3);
2498 template <
typename T>
2500 const point2d<T>& point2,
2501 const point2d<T>& point3);
2503 template <
typename T>
2506 template <
typename T>
2507 inline point2d<T>
orthocenter(
const triangle<T, 2>& triangle);
2509 template <
typename T>
2510 inline point3d<T>
orthocenter(
const triangle<T, 3>& triangle);
2512 template <
typename T>
2513 inline point2d<T>
excenter(
const triangle<T, 2>& triangle,
2514 const std::size_t& corner);
2516 template <
typename T>
2517 inline point3d<T>
excenter(
const triangle<T, 3>& triangle,
2518 const std::size_t& corner);
2520 template <
typename T>
2521 inline circle<T>
excircle(
const triangle<T, 2>& triangle,
const std::size_t& i);
2523 template <
typename T>
2526 template <
typename T>
2529 template <
typename T>
2531 const circle<T>& circle2);
2533 template <
typename T>
2535 const sphere<T>& sphere2);
2537 template <
typename T>
2539 const point2d<T>& point, point2d<T>& point1,
2540 point2d<T>& point2);
2542 template <
typename T>
2544 const circle<T>& circle1,
2545 std::vector<line<T, 2> >& lines);
2547 template <
typename T>
2549 const circle<T>& circle0,
const circle<T>& circle1,
2550 std::vector<segment<T, 2> >& segments);
2552 template <
typename T>
2554 const circle<T>& circle1,
2555 std::vector<line<T, 2> >& lines);
2557 template <
typename T>
2559 const circle<T>& circle0,
const circle<T>& circle1,
2560 std::vector<segment<T, 2> >& segments);
2562 template <
typename T>
2563 inline line<T, 2>
tangent_line(
const circle<T>& circle,
2564 const point2d<T>& point);
2566 template <
typename T>
2568 const T& x2,
const T& y2,
2569 const T& x3,
const T& y3);
2571 template <
typename T>
2573 const T& x2,
const T& y2,
2574 const T& x3,
const T& y3);
2576 template <
typename T>
2578 const T& y2,
const T& x3,
2581 template <
typename T>
2583 const T& z1,
const T& x2,
2584 const T& y2,
const T& z2,
2585 const T& x3,
const T& y3,
2588 template <
typename T>
2590 const T& z1,
const T& x2,
2591 const T& y2,
const T& z2,
2592 const T& x3,
const T& y3,
2595 template <
typename T>
2597 const T& x2,
const T& y2,
const T& z2,
2598 const T& x3,
const T& y3,
2601 template <
typename T>
2603 const point2d<T>& point2,
2604 const point2d<T>& point3);
2605 template <
typename T>
2607 const point2d<T>& point2,
2608 const point2d<T>& point3);
2609 template <
typename T>
2611 const point2d<T>& point2,
2612 const point2d<T>& point3);
2613 template <
typename T>
2615 const point3d<T>& point2,
2616 const point3d<T>& point3);
2617 template <
typename T>
2619 const point3d<T>& point2,
2620 const point3d<T>& point3);
2621 template <
typename T>
2623 const point3d<T>& point2,
2624 const point3d<T>& point3);
2626 template <
typename T>
2628 const T& x2,
const T& y2);
2629 template <
typename T>
2631 const point2d<T>& point2);
2632 template <
typename T>
2635 template <
typename T>
2637 const line<T, 2>& line);
2639 template <
typename T>
2641 const T& x2,
const T& y2,
2642 const T& px,
const T& py, T& nx,
2645 template <
typename T>
2647 const T& x1,
const T& y1,
const T& z1,
const T& x2,
const T& y2,
2648 const T& z2,
const T& px,
const T& py,
const T& pz, T& nx, T& ny, T& nz);
2650 template <
typename T>
2652 const T& x2,
const T& y2,
2653 const T& px,
const T& py, T& nx,
2656 template <
typename T>
2658 const T& z1,
const T& x2,
2659 const T& y2,
const T& z2,
2660 const T& px,
const T& py,
2661 const T& pz, T& nx, T& ny, T& nz);
2663 template <
typename T>
2665 const T& x1,
const T& y1,
const T& x2,
const T& y2,
const T& px,
2666 const T& py, T& nx, T& ny);
2668 template <
typename T>
2670 const T& x1,
const T& y1,
const T& z1,
const T& x2,
const T& y2,
2671 const T& z2,
const T& px,
const T& py,
const T& pz, T& nx, T& ny, T& nz);
2673 template <
typename T>
2675 const T& x1,
const T& y1,
const T& x2,
const T& y2,
const T& px,
2676 const T& py, T& nx, T& ny);
2678 template <
typename T>
2680 const T& x1,
const T& y1,
const T& z1,
const T& x2,
const T& y2,
2681 const T& z2,
const T& px,
const T& py,
const T& pz, T& nx, T& ny, T& nz);
2683 template <
typename T>
2685 const T& dx,
const T& dy,
2686 const T& px,
const T& py, T& nx,
2689 template <
typename T>
2691 const T& oz,
const T& dx,
2692 const T& dy,
const T& dz,
2693 const T& px,
const T& py,
2694 const T& pz, T& nx, T& ny, T& nz);
2696 template <
typename T>
2698 const T& x2,
const T& y2,
2699 const T& px,
const T& py);
2701 template <
typename T>
2703 const T& z1,
const T& x2,
2704 const T& y2,
const T& z2,
2705 const T& px,
const T& py,
2708 template <
typename T>
2710 const segment<T, 2>& segment,
const point2d<T>& point);
2712 template <
typename T>
2714 const segment<T, 3>& segment,
const point3d<T>& point);
2716 template <
typename T>
2718 const T& x2,
const T& y2,
2719 const T& px,
const T& py);
2721 template <
typename T>
2723 const T& z1,
const T& x2,
2724 const T& y2,
const T& z2,
2725 const T& px,
const T& py,
2728 template <
typename T>
2730 const point2d<T>& point);
2732 template <
typename T>
2734 const point3d<T>& point);
2736 template <
typename T>
2738 const T& dx,
const T& dy,
2739 const T& px,
const T& py);
2741 template <
typename T>
2743 const T& oz,
const T& dx,
2744 const T& dy,
const T& dz,
2745 const T& px,
const T& py,
2748 template <
typename T>
2750 const point2d<T>& point);
2752 template <
typename T>
2754 const point3d<T>& point);
2756 template <
typename T>
2758 const T& x2,
const T& y2,
2759 const T& x3,
const T& y3,
2760 const T& px,
const T& py,
2763 template <
typename T>
2765 const T& x2,
const T& y2,
2766 const T& x3,
const T& y3,
2770 template <
typename T>
2772 const triangle<T, 2>& triangle,
const T& px,
const T& py);
2774 template <
typename T>
2776 const triangle<T, 2>& triangle,
const point2d<T>& point);
2778 template <
typename T>
2780 const T& x1,
const T& y1,
const T& z1,
const T& x2,
const T& y2,
2781 const T& z2,
const T& x3,
const T& y3,
const T& z3,
const T& px,
2782 const T& py,
const T& pz, T& nx, T& ny, T& nz);
2784 template <
typename T>
2786 const T& x1,
const T& y1,
const T& z1,
const T& x2,
const T& y2,
2787 const T& z2,
const T& x3,
const T& y3,
const T& z3,
const T& px,
2788 const T& py,
const T& pz);
2790 template <
typename T>
2792 const triangle<T, 3>& triangle,
const T& px,
const T& py,
const T& pz);
2794 template <
typename T>
2796 const triangle<T, 3>& triangle,
const point3d<T>& point);
2798 template <
typename T>
2800 const T& x2,
const T& y2,
2801 const T& px,
const T& py,
2804 template <
typename T>
2806 const T& x1,
const T& y1,
const T& x2,
const T& y2,
const T& px,
2809 template <
typename T>
2811 const rectangle<T>& rectangle,
const T& px,
const T& py);
2813 template <
typename T>
2815 const rectangle<T>& rectangle,
const point2d<T>& point);
2817 template <
typename T>
2819 const T& z1,
const T& x2,
2820 const T& y2,
const T& z2,
2821 const T& px,
const T& py,
2822 const T& pz, T& nx, T& ny, T& nz);
2824 template <
typename T>
2826 const T& z1,
const T& x2,
2827 const T& y2,
const T& z2,
2828 const T& px,
const T& py,
2831 template <
typename T>
2833 const T& px,
const T& py,
2836 template <
typename T>
2838 const point3d<T>& point);
2840 template <
typename T>
2842 const T& x2,
const T& y2,
2843 const T& x3,
const T& y3,
2844 const T& x4,
const T& y4,
2845 const T& px,
const T& py, T& nx,
2848 template <
typename T>
2850 const T& x2,
const T& y2,
2851 const T& x3,
const T& y3,
2852 const T& x4,
const T& y4,
2853 const T& px,
const T& py);
2854 template <
typename T>
2856 const point2d<T>& point);
2858 template <
typename T>
2860 const point2d<T>& point);
2862 template <
typename T>
2864 const point3d<T>& point);
2866 template <
typename T>
2868 const rectangle<T>& rectangle,
const point2d<T>& point);
2870 template <
typename T>
2872 const circle<T>& circle,
const segment<T, 2>& segment);
2874 template <
typename T>
2876 const sphere<T>& sphere,
const segment<T, 3>& segment);
2878 template <
typename T>
2880 const point3d<T>& point);
2882 template <
typename T>
2884 const quadratic_bezier<T, 2>& bezier,
const point2d<T>& point,
2885 const std::size_t& steps = 1000);
2887 template <
typename T>
2889 const cubic_bezier<T, 2>& bezier,
const point2d<T>& point,
2890 const std::size_t& steps = 1000);
2892 template <
typename T>
2894 const quadratic_bezier<T, 3>& bezier,
const point3d<T>& point,
2895 const std::size_t& steps = 1000);
2897 template <
typename T>
2899 const cubic_bezier<T, 3>& bezier,
const point3d<T>& point,
2900 const std::size_t& steps = 1000);
2902 template <
typename T>
2904 const circle<T>& circle2);
2906 template <
typename T>
2908 const sphere<T>& sphere2);
2910 template <
typename T>
2912 const polygon<T, 2>& polygon,
const point2d<T>& point);
2914 template <
typename T>
2916 const T& x1,
const T& y1,
2917 const T& x2,
const T& y2);
2919 template <
typename T>
2921 const T& pz,
const T& x1,
2922 const T& y1,
const T& z1,
2923 const T& x2,
const T& y2,
2926 template <
typename T>
2928 const segment<T, 2>& segment);
2930 template <
typename T>
2932 const segment<T, 3>& segment);
2934 template <
typename T>
2936 const T& x1,
const T& y1,
2937 const T& x2,
const T& y2);
2939 template <
typename T>
2941 const T& pz,
const T& x1,
2942 const T& y1,
const T& z1,
2943 const T& x2,
const T& y2,
2946 template <
typename T>
2948 const line<T, 2>& line);
2950 template <
typename T>
2952 const line<T, 3>& line);
2954 template <
typename T>
2956 const T& x1,
const T& y1,
2957 const T& x2,
const T& y2,
2958 const T& x3,
const T& y3);
2960 template <
typename T>
2962 const point2d<T>& point,
const triangle<T, 2>& triangle);
2964 template <
typename T>
2966 const T& x1,
const T& y1,
2967 const T& x2,
const T& y2);
2969 template <
typename T>
2971 const point2d<T>& point,
const rectangle<T>& rectangle);
2973 template <
typename T>
2975 const T& y2, T& midx, T& midy);
2977 template <
typename T>
2980 template <
typename T>
2982 const point2d<T>& point2);
2984 template <
typename T>
2987 template <
typename T>
2989 const T& x2,
const T& y2,
const T& z2, T& midx,
2992 template <
typename T>
2996 template <
typename T>
2998 const point3d<T>& point2);
3000 template <
typename T>
3003 template <
typename T>
3004 inline void centroid(
const T& x1,
const T& y1,
const T& x2,
const T& y2, T& x,
3007 template <
typename T>
3008 inline point2d<T>
centroid(
const point2d<T>& point1,
const point2d<T>& point2);
3010 template <
typename T>
3011 inline point2d<T>
centroid(
const segment<T, 2>& segment);
3013 template <
typename T>
3014 inline void centroid(
const T& x1,
const T& y1,
const T& x2,
const T& y2,
3015 const T& x3,
const T& y3, T& x, T& y);
3017 template <
typename T>
3018 inline void centroid(
const T& x1,
const T& y1,
const T& z1,
const T& x2,
3019 const T& y2,
const T& z2,
const T& x3,
const T& y3,
3020 const T& z3, T& x, T& y, T& z);
3022 template <
typename T>
3023 inline void centroid(
const T& x1,
const T& y1,
const T& x2,
const T& y2,
3024 const T& x3,
const T& y3,
const T& x4,
const T& y4, T& x,
3027 template <
typename T>
3028 inline void centroid(
const triangle<T, 2>& triangle, T& x, T& y);
3029 template <
typename T>
3030 inline void centroid(
const triangle<T, 3>& triangle, T& x, T& y, T& z);
3031 template <
typename T>
3032 inline void centroid(
const quadix<T, 2>& quadix, T& x, T& y);
3033 template <
typename T>
3034 inline void centroid(
const rectangle<T>& rectangle, T& x, T& y);
3035 template <
typename T>
3036 inline void centroid(
const box<T, 3>& box, T& x, T& y, T& z);
3037 template <
typename T>
3038 inline void centroid(
const polygon<T, 2>& polygon, T& x, T& y);
3040 template <
typename T>
3041 inline point2d<T>
centroid(
const point2d<T>& point1,
const point2d<T>& point2,
3042 const point2d<T>& point3);
3043 template <
typename T>
3044 inline point2d<T>
centroid(
const point2d<T>& point1,
const point2d<T>& point2,
3045 const point2d<T>& point3,
const point2d<T>& point4);
3046 template <
typename T>
3047 inline point2d<T>
centroid(
const triangle<T, 2>& triangle);
3048 template <
typename T>
3049 inline point3d<T>
centroid(
const triangle<T, 3>& triangle);
3050 template <
typename T>
3051 inline point2d<T>
centroid(
const quadix<T, 2>& quadix);
3052 template <
typename T>
3053 inline point2d<T>
centroid(
const rectangle<T>& rectangle);
3054 template <
typename T>
3055 inline point3d<T>
centroid(
const box<T, 3>& box);
3056 template <
typename T>
3057 inline point2d<T>
centroid(
const polygon<T, 2>& polygon);
3059 template <
typename T>
3060 inline bool common_center(
const circle<T>& circle1,
const circle<T>& circle2);
3061 template <
typename T>
3062 inline bool common_center(
const sphere<T>& sphere1,
const sphere<T>& circle2);
3064 template <
typename T>
3066 const polygon<T, 2>& polygon);
3067 template <
typename T>
3069 const polygon<T, 2>& polygon);
3071 template <
typename T>
3073 const polygon<T, 2>& polygon);
3074 template <
typename T>
3076 const polygon<T, 2>& polygon);
3078 template <
typename T>
3080 const polygon<T, 2>& polygon);
3081 template <
typename T>
3083 const polygon<T, 2>& polygon);
3085 template <
typename T>
3087 const polygon<T, 2>& polygon);
3088 template <
typename T>
3090 const polygon<T, 2>& polygon);
3092 template <
typename T>
3094 template <
typename T>
3097 template <
typename T>
3100 template <
typename T>
3102 const polygon<T, 2>& polygon);
3104 template <
typename T,
typename InputIterator,
typename OutputIterator>
3106 const InputIterator end,
3107 OutputIterator out);
3109 template <
typename T>
3111 const polygon<T, 2>& polygon,
3114 template <
typename T>
3116 const polygon<T, 2>& polygon);
3118 template <
typename T>
3120 const polygon<T, 2>& polygon);
3122 template <
typename T>
3124 const polygon<T, 2> polygon);
3126 template <
typename T>
3129 template <
typename T>
3131 template <
typename T>
3134 template <
typename T>
3136 template <
typename T>
3139 template <
typename T>
3141 template <
typename T>
3144 template <
typename T>
3146 const triangle<T, 2>& triangle2);
3147 template <
typename T>
3149 const triangle<T, 3>& triangle2);
3151 template <
typename T>
3152 inline line<T, 2>
perspectrix(
const triangle<T, 2>& triangle1,
3153 const triangle<T, 2>& triangle2);
3154 template <
typename T>
3155 inline line<T, 3>
perspectrix(
const triangle<T, 3>& triangle1,
3156 const triangle<T, 3>& triangle2);
3158 template <
typename T>
3159 inline void mirror(
const T& px,
const T& py,
const T& x1,
const T& y1,
3160 const T& x2,
const T& y2, T& nx, T& ny);
3162 template <
typename T>
3163 inline void mirror(
const T& px,
const T& py,
const T& pz,
const T& x1,
3164 const T& y1,
const T& z1,
const T& x2,
const T& y2,
3165 const T& z2, T& nx, T& ny, T& nz);
3167 template <
typename T>
3168 inline point2d<T>
mirror(
const point2d<T>& point,
3169 const line<T, 2>& mirror_axis);
3170 template <
typename T>
3171 inline segment<T, 2>
mirror(
const segment<T, 2>& segment,
3172 const line<T, 2>& mirror_axis);
3173 template <
typename T>
3174 inline line<T, 2>
mirror(
const line<T, 2>& line,
3176 template <
typename T>
3177 inline rectangle<T>
mirror(
const rectangle<T>& rectangle,
3178 const line<T, 2>& mirror_axis);
3179 template <
typename T>
3180 inline triangle<T, 2>
mirror(
const triangle<T, 2>& triangle,
3181 const line<T, 2>& mirror_axis);
3182 template <
typename T>
3183 inline quadix<T, 2>
mirror(
const quadix<T, 2>& quadix,
3184 const line<T, 2>& mirror_axis);
3185 template <
typename T>
3186 inline circle<T>
mirror(
const circle<T>& circle,
const line<T, 2>& mirror_axis);
3187 template <
typename T>
3188 inline polygon<T, 2>
mirror(
const polygon<T, 2>& polygon,
3189 const line<T, 2>& mirror_axis);
3191 template <
typename T>
3192 inline point3d<T>
mirror(
const point3d<T>& point,
3193 const line<T, 3>& mirror_axis);
3194 template <
typename T>
3195 inline segment<T, 3>
mirror(
const segment<T, 3>& segment,
3196 const line<T, 3>& mirror_axis);
3197 template <
typename T>
3198 inline line<T, 3>
mirror(
const line<T, 3>& line,
3200 template <
typename T>
3201 inline box<T, 3>
mirror(
const box<T, 3>& box,
const line<T, 3>& mirror_axis);
3202 template <
typename T>
3203 inline triangle<T, 3>
mirror(
const triangle<T, 3>& triangle,
3204 const line<T, 3>& mirror_axis);
3205 template <
typename T>
3206 inline quadix<T, 3>
mirror(
const quadix<T, 3>& quadix,
3207 const line<T, 3>& mirror_axis);
3208 template <
typename T>
3209 inline sphere<T>
mirror(
const sphere<T>& sphere,
const line<T, 3>& mirror_axis);
3210 template <
typename T>
3211 inline polygon<T, 3>
mirror(
const polygon<T, 3>& polygon,
3212 const line<T, 3>& mirror_axis);
3214 template <
typename T>
3215 inline point3d<T>
mirror(
const point3d<T>& point,
3216 const plane<T, 3>& mirror_plane);
3217 template <
typename T>
3218 inline segment<T, 3>
mirror(
const segment<T, 3>& segment,
3219 const plane<T, 3>& mirror_plane);
3220 template <
typename T>
3221 inline line<T, 3>
mirror(
const line<T, 3>& line,
3222 const plane<T, 3>& mirror_plane);
3223 template <
typename T>
3224 inline box<T, 3>
mirror(
const box<T, 3>& box,
const plane<T, 3>& mirror_plane);
3225 template <
typename T>
3226 inline triangle<T, 3>
mirror(
const triangle<T, 3>& triangle,
3227 const plane<T, 3>& mirror_plane);
3228 template <
typename T>
3229 inline quadix<T, 3>
mirror(
const quadix<T, 3>& quadix,
3230 const plane<T, 3>& mirror_plane);
3231 template <
typename T>
3232 inline sphere<T>
mirror(
const sphere<T>& sphere,
3233 const plane<T, 3>& mirror_plane);
3234 template <
typename T>
3235 inline polygon<T, 3>
mirror(
const polygon<T, 3>& polygon,
3236 const plane<T, 3>& mirror_plane);
3238 template <
typename T>
3240 const T& y1,
const T& x2,
const T& y2,
3241 const T& ratio, T& nx, T& ny);
3243 template <
typename T>
3245 const line<T, 2>& line);
3246 template <
typename T>
3249 const line<T, 2>& line);
3250 template <
typename T>
3252 const T& ratio,
const line<T, 2>& line);
3253 template <
typename T>
3256 const line<T, 2>& line);
3257 template <
typename T>
3259 const T& ratio,
const line<T, 2>& line);
3260 template <
typename T>
3262 const line<T, 2>& line);
3263 template <
typename T>
3266 const line<T, 2>& line);
3268 template <
typename T>
3270 const plane<T, 3>& plane);
3271 template <
typename T>
3274 const plane<T, 3>& plane);
3275 template <
typename T>
3277 const plane<T, 3>& plane);
3278 template <
typename T>
3281 const plane<T, 3>& plane);
3282 template <
typename T>
3285 const plane<T, 3>& plane);
3286 template <
typename T>
3288 const plane<T, 3>& plane);
3289 template <
typename T>
3292 const plane<T, 3>& plane);
3294 template <
typename T>
3295 inline point2d<T>
invert_point(
const point2d<T>& point,
3296 const circle<T>& circle);
3297 template <
typename T>
3298 inline point3d<T>
invert_point(
const point3d<T>& point,
3299 const sphere<T>& sphere);
3301 template <
typename T>
3303 const circle<T>& circle);
3304 template <
typename T>
3306 const sphere<T>& sphere);
3308 template <
typename T>
3309 inline T
distance(
const T& x1,
const T& y1,
const T& x2,
const T& y2);
3310 template <
typename T>
3311 inline T
distance(
const T& x1,
const T& y1,
const T& z1,
const T& x2,
3312 const T& y2,
const T& z2);
3313 template <
typename T>
3314 inline T
distance(
const point2d<T>& point1,
const point2d<T>& point2);
3315 template <
typename T>
3316 inline T
distance(
const point3d<T>& point1,
const point3d<T>& point2);
3317 template <
typename T>
3318 inline T
distance(
const curve_point<T, 2>& point1,
3319 const curve_point<T, 2>& point2);
3320 template <
typename T>
3321 inline T
distance(
const curve_point<T, 3>& point1,
3322 const curve_point<T, 3>& point2);
3323 template <
typename T>
3324 inline T
distance(
const point2d<T>& point,
const segment<T, 2>& segment);
3325 template <
typename T>
3326 inline T
distance(
const point3d<T>& point,
const segment<T, 3>& segment);
3327 template <
typename T>
3328 inline T
distance(
const point2d<T>& point,
const rectangle<T>& rectangle);
3329 template <
typename T>
3330 inline T
distance(
const point2d<T>& point,
const triangle<T, 2>& triangle);
3331 template <
typename T>
3332 inline T
distance(
const point2d<T>& point,
const quadix<T, 2>& quadix);
3333 template <
typename T>
3334 inline T
distance(
const point2d<T>& point,
const ray<T, 2>& ray);
3335 template <
typename T>
3336 inline T
distance(
const point3d<T>& point,
const ray<T, 3>& ray);
3337 template <
typename T>
3338 inline T
distance(
const point3d<T>& point,
const plane<T, 3>& plane);
3339 template <
typename T>
3340 inline T
distance(
const line<T, 2>& line1,
const line<T, 2>& line2);
3341 template <
typename T>
3342 inline T
distance(
const line<T, 3>& line1,
const line<T, 3>& line2);
3343 template <
typename T>
3344 inline T
distance(
const segment<T, 2>& segment1,
const segment<T, 2>& segment2);
3345 template <
typename T>
3346 inline T
distance(
const segment<T, 3>& segment1,
const segment<T, 3>& segment2);
3347 template <
typename T>
3348 inline T
distance(
const segment<T, 2>& segment);
3349 template <
typename T>
3350 inline T
distance(
const segment<T, 3>& segment);
3351 template <
typename T>
3352 inline T
distance(
const segment<T, 2>& segment,
const triangle<T, 2>& triangle);
3353 template <
typename T>
3354 inline T
distance(
const segment<T, 3>& segment,
const triangle<T, 3>& triangle);
3355 template <
typename T>
3356 inline T
distance(
const segment<T, 2>& segment,
const rectangle<T>& rectangle);
3357 template <
typename T>
3358 inline T
distance(
const segment<T, 2>& segment,
const circle<T>& circle);
3359 template <
typename T>
3360 inline T
distance(
const triangle<T, 2>& triangle1,
3361 const triangle<T, 2>& triangle2);
3362 template <
typename T>
3363 inline T
distance(
const triangle<T, 2>& triangle,
3364 const rectangle<T>& rectangle);
3365 template <
typename T>
3366 inline T
distance(
const rectangle<T>& rectangle1,
3367 const rectangle<T>& rectangle2);
3368 template <
typename T>
3369 inline T
distance(
const triangle<T, 2>& triangle,
const circle<T>& circle);
3370 template <
typename T>
3371 inline T
distance(
const rectangle<T>& rectangle,
const circle<T>& circle);
3372 template <
typename T>
3373 inline T
distance(
const point2d<T>& point,
const circle<T>& circle);
3374 template <
typename T>
3375 inline T
distance(
const circle<T>& circle1,
const circle<T>& circle2);
3376 template <
typename T>
3377 inline T
distance(
const sphere<T>& sphere1,
const sphere<T>& sphere2);
3379 template <
typename T>
3380 inline T
lay_distance(
const T& x1,
const T& y1,
const T& x2,
const T& y2);
3381 template <
typename T>
3382 inline T
lay_distance(
const T& x1,
const T& y1,
const T& z1,
const T& x2,
3383 const T& y2,
const T& z2);
3384 template <
typename T>
3385 inline T
lay_distance(
const point2d<T>& point1,
const point2d<T>& point2);
3386 template <
typename T>
3387 inline T
lay_distance(
const point3d<T>& point1,
const point3d<T>& point2);
3388 template <
typename T>
3389 inline T
lay_distance(
const point2d<T>& point,
const triangle<T, 2>& triangle);
3390 template <
typename T>
3391 inline T
lay_distance(
const point2d<T>& point,
const quadix<T, 2>& triangle);
3392 template <
typename T>
3393 inline T
lay_distance(
const point2d<T>& point,
const ray<T, 2>& ray);
3394 template <
typename T>
3395 inline T
lay_distance(
const point3d<T>& point,
const ray<T, 3>& ray);
3396 template <
typename T>
3397 inline T
lay_distance(
const point3d<T>& point,
const plane<T, 3>& plane);
3398 template <
typename T>
3400 const segment<T, 2>& segment2);
3401 template <
typename T>
3403 const segment<T, 3>& segment2);
3404 template <
typename T>
3405 inline T
lay_distance(
const line<T, 3>& line1,
const line<T, 3>& line2);
3406 template <
typename T>
3408 template <
typename T>
3410 template <
typename T>
3412 const triangle<T, 2>& triangle);
3413 template <
typename T>
3415 const triangle<T, 3>& triangle);
3417 template <
typename T>
3419 template <
typename T>
3421 const T& y2,
const T& z2);
3422 template <
typename T>
3424 template <
typename T>
3426 template <
typename T>
3428 template <
typename T>
3430 template <
typename T>
3432 template <
typename T>
3434 template <
typename T>
3437 template <
typename T>
3439 template <
typename T>
3441 const T& y2,
const T& z2);
3442 template <
typename T>
3444 template <
typename T>
3446 template <
typename T>
3448 template <
typename T>
3450 template <
typename T>
3453 template <
typename T>
3456 template <
typename T>
3458 const T& x2,
const T& y2,
const T& z2);
3459 template <
typename T>
3461 const point2d<T>& point2);
3462 template <
typename T>
3464 const point3d<T>& point2);
3465 template <
typename T>
3467 template <
typename T>
3469 template <
typename T>
3471 const circle<T>& circle2);
3473 template <
typename T>
3475 const point2d<T>& point2);
3476 template <
typename T>
3477 inline polygon<T, 2>
minkowski_sum(
const rectangle<T>& rectangle1,
3478 const rectangle<T>& rectangle2);
3479 template <
typename T>
3480 inline polygon<T, 2>
minkowski_sum(
const triangle<T, 2>& triangle1,
3481 const triangle<T, 2>& triangle2);
3482 template <
typename T>
3483 inline polygon<T, 2>
minkowski_sum(
const quadix<T, 2>& quadix1,
3484 const quadix<T, 2>& quadix2);
3485 template <
typename T>
3486 inline polygon<T, 2>
minkowski_sum(
const circle<T>& triangle,
3487 const circle<T>& circle);
3489 template <
typename T>
3490 inline polygon<T, 2>
minkowski_sum(
const triangle<T, 2>& triangle,
3491 const rectangle<T>& rectangle);
3492 template <
typename T>
3493 inline polygon<T, 2>
minkowski_sum(
const triangle<T, 2>& triangle,
3494 const quadix<T, 2>& quadix);
3495 template <
typename T>
3496 inline polygon<T, 2>
minkowski_sum(
const triangle<T, 2>& triangle,
3497 const circle<T>& circle);
3498 template <
typename T>
3499 inline polygon<T, 2>
minkowski_sum(
const quadix<T, 2>& quadix,
3500 const circle<T>& circle);
3501 template <
typename T>
3502 inline polygon<T, 2>
minkowski_sum(
const quadix<T, 2>& quadix,
3503 const rectangle<T>& rectangle);
3504 template <
typename T>
3505 inline polygon<T, 2>
minkowski_sum(
const rectangle<T>& rectangle,
3506 const circle<T>& circle);
3507 template <
typename T>
3508 inline polygon<T, 2>
minkowski_sum(
const polygon<T, 2>& polygon1,
3509 const polygon<T, 2>& polygon2);
3511 template <
typename T>
3513 const point2d<T>& point2);
3514 template <
typename T>
3516 const rectangle<T>& rectangle2);
3517 template <
typename T>
3519 const triangle<T, 2>& triangle2);
3520 template <
typename T>
3522 const quadix<T, 2>& quadix2);
3523 template <
typename T>
3525 const circle<T>& circle);
3527 template <
typename T>
3529 const rectangle<T>& rectangle);
3530 template <
typename T>
3532 const quadix<T, 2>& quadix);
3533 template <
typename T>
3535 const circle<T>& circle);
3536 template <
typename T>
3538 const circle<T>& circle);
3539 template <
typename T>
3541 const rectangle<T>& rectangle);
3542 template <
typename T>
3544 const circle<T>& circle);
3545 template <
typename T>
3547 const polygon<T, 2>& polygon2);
3549 template <
typename T>
3551 const T& y2,
const T& x3,
const T& y3,
3552 const T& x4,
const T& y4);
3554 template <
typename T>
3556 const T& x2,
const T& y2,
const T& z2,
3557 const T& x3,
const T& y3,
const T& z3,
3558 const T& x4,
const T& y4,
const T& z4);
3560 template <
typename T>
3562 const T& y2,
const T& x3,
const T& y3,
3563 const T& x4,
const T& y4);
3565 template <
typename T>
3567 const T& x2,
const T& y2,
const T& z2,
3568 const T& x3,
const T& y3,
const T& z3,
3569 const T& x4,
const T& y4,
const T& z4);
3571 template <
typename T>
3573 const T& y2,
const T& x3,
const T& y3,
3574 const T& x4,
const T& y4);
3576 template <
typename T>
3578 const T& x2,
const T& y2,
const T& z2,
3579 const T& x3,
const T& y3,
const T& z3,
3580 const T& x4,
const T& y4,
const T& z4);
3582 template <
typename T>
3584 const T& y2,
const T& x3,
const T& y3,
3585 const T& x4,
const T& y4);
3587 template <
typename T>
3589 const T& x2,
const T& y2,
const T& z2,
3590 const T& x3,
const T& y3,
const T& z3,
3591 const T& x4,
const T& y4,
const T& z4);
3593 template <
typename T>
3595 const circle<T>& circle);
3597 template <
typename T>
3599 const sphere<T>& sphere);
3601 template <
typename T>
3603 const circle<T>& circle);
3605 template <
typename T>
3607 const sphere<T>& sphere);
3609 template <
typename T>
3610 inline T
span_length(
const rectangle<T>& rectangle);
3612 template <
typename T>
3615 template <
typename T>
3616 inline void project_point_t(
const T& srcx,
const T& srcy,
const T& destx,
3617 const T& desty,
const T& t, T& nx, T& ny);
3619 template <
typename T>
3620 inline void project_point_t(
const T& srcx,
const T& srcy,
const T& srcz,
3621 const T& destx,
const T& desty,
const T& destz,
3622 const T& t, T& nx, T& ny, T& nz);
3624 template <
typename T>
3625 inline void project_point(
const T& srcx,
const T& srcy,
const T& destx,
3626 const T& desty,
const T& dist, T& nx, T& ny);
3628 template <
typename T>
3629 inline void project_point(
const T& srcx,
const T& srcy,
const T& srcz,
3630 const T& destx,
const T& desty,
const T& destz,
3631 const T& dist, T& nx, T& ny, T& nz);
3633 template <
typename T>
3634 inline void project_point(
const T& px,
const T& py,
const T& angle,
3637 template <
typename T>
3640 template <
typename T>
3643 template <
typename T>
3646 template <
typename T>
3649 template <
typename T>
3652 template <
typename T>
3655 template <
typename T>
3658 template <
typename T>
3662 template <
typename T>
3664 const point2d<T>& destination_point,
3667 template <
typename T>
3669 const point3d<T>& destination_point,
3672 template <
typename T>
3673 inline point2d<T>
project_point(
const point2d<T>& source_point,
3674 const point2d<T>& destination_point,
3677 template <
typename T>
3678 inline point3d<T>
project_point(
const point3d<T>& source_point,
3679 const point3d<T>& destination_point,
3682 template <
typename T>
3683 inline point2d<T>
project_point(
const point2d<T>& point,
const T& angle,
3686 template <
typename T>
3688 template <
typename T>
3690 template <
typename T>
3692 template <
typename T>
3694 template <
typename T>
3696 template <
typename T>
3698 template <
typename T>
3700 template <
typename T>
3703 template <
typename T>
3704 inline point2d<T>
project_object(
const point2d<T>& point,
const T& angle,
3706 template <
typename T>
3707 inline segment<T, 2>
project_object(
const segment<T, 2>& segment,
3708 const T& angle,
const T&
distance);
3709 template <
typename T>
3710 inline triangle<T, 2>
project_object(
const triangle<T, 2>& triangle,
3711 const T& angle,
const T&
distance);
3712 template <
typename T>
3713 inline quadix<T, 2>
project_object(
const quadix<T, 2>& quadix,
const T& angle,
3715 template <
typename T>
3716 inline circle<T>
project_object(
const circle<T>& circle,
const T& angle,
3718 template <
typename T>
3719 inline polygon<T, 2>
project_object(
const polygon<T, 2>& polygon,
3720 const T& angle,
const T&
distance);
3722 template <
typename T>
3724 const line<T, 2>& axis);
3725 template <
typename T>
3727 const line<T, 2>& axis);
3728 template <
typename T>
3730 const line<T, 2>& axis);
3731 template <
typename T>
3733 const line<T, 2>& axis);
3734 template <
typename T>
3736 const line<T, 2>& axis);
3737 template <
typename T>
3739 const line<T, 2>& axis);
3741 template <
typename T>
3743 const line<T, 3>& axis);
3744 template <
typename T>
3746 const line<T, 3>& axis);
3747 template <
typename T>
3749 const line<T, 3>& axis);
3750 template <
typename T>
3752 const line<T, 3>& axis);
3753 template <
typename T>
3755 const line<T, 3>& axis);
3756 template <
typename T>
3758 const line<T, 3>& axis);
3760 template <
typename T>
3762 T& ax, T& bx, T& ay, T& by);
3763 template <
typename T>
3765 T& ax, T& bx, T& ay, T& by, T& az,
3767 template <
typename T>
3769 T& ax, T& bx, T& cx, T& ay, T& by,
3771 template <
typename T>
3773 T& ax, T& bx, T& cx, T& ay, T& by,
3774 T& cy, T& az, T& bz, T& cz);
3776 template <
typename T>
3778 const quadratic_bezier<T, 2>& bezier,
3779 bezier_coefficients<T, 2, eQuadraticBezier>& coeffs);
3781 template <
typename T>
3783 const quadratic_bezier<T, 3>& bezier,
3784 bezier_coefficients<T, 3, eQuadraticBezier>& coeffs);
3786 template <
typename T>
3788 const cubic_bezier<T, 2>& bezier,
3789 bezier_coefficients<T, 2, eCubicBezier>& coeffs);
3791 template <
typename T>
3793 const cubic_bezier<T, 3>& bezier,
3794 bezier_coefficients<T, 3, eCubicBezier>& coeffs);
3796 template <
typename T>
3798 const T& ax,
const T& bx,
const T& ay,
3799 const T& by,
const T& t);
3801 template <
typename T>
3803 const T& ax,
const T& bx,
const T& ay,
3804 const T& by,
const T& az,
const T& bz,
3807 template <
typename T>
3809 const T& ax,
const T& bx,
const T& cx,
3810 const T& ay,
const T& by,
const T& cy,
3813 template <
typename T>
3815 const T& ax,
const T& bx,
const T& cx,
3816 const T& ay,
const T& by,
const T& cy,
3817 const T& az,
const T& bz,
const T& cz,
3820 template <
typename T>
3822 const point2d<T>& start_point,
3823 const bezier_coefficients<T, 2, eQuadraticBezier>& coeffs,
const T& t);
3825 template <
typename T>
3827 const point3d<T>& start_point,
3828 const bezier_coefficients<T, 3, eQuadraticBezier>& coeffs,
const T& t);
3830 template <
typename T>
3832 const point2d<T>& start_point,
3833 const bezier_coefficients<T, 2, eCubicBezier>& coeffs,
const T& t);
3835 template <
typename T>
3837 const point3d<T>& start_point,
3838 const bezier_coefficients<T, 3, eCubicBezier>& coeffs,
const T& t);
3840 template <
typename T,
typename OutputIterator>
3843 const std::size_t& point_count = 1000);
3844 template <
typename T,
typename OutputIterator>
3847 const std::size_t& point_count = 1000);
3848 template <
typename T,
typename OutputIterator>
3851 const std::size_t& point_count = 1000);
3852 template <
typename T,
typename OutputIterator>
3855 const std::size_t& point_count = 1000);
3857 template <
typename T>
3859 const std::size_t& point_count);
3860 template <
typename T>
3862 const std::size_t& point_count);
3863 template <
typename T>
3865 const std::size_t& point_count);
3866 template <
typename T>
3868 const std::size_t& point_count);
3870 template <
typename T>
3872 template <
typename T>
3875 template <
typename T>
3877 const T& x,
const T& y);
3878 template <
typename T>
3880 const T& x,
const T& y,
const T& z);
3881 template <
typename T>
3883 const T& x,
const T& y);
3884 template <
typename T>
3886 const T& x,
const T& y);
3887 template <
typename T>
3889 const T& y,
const T& z);
3890 template <
typename T>
3893 template <
typename T>
3896 template <
typename T>
3898 const T& x,
const T& y);
3900 template <
typename T>
3902 const point2d<T>& center_point);
3903 template <
typename T>
3905 const point3d<T>& center_point);
3906 template <
typename T>
3908 const point2d<T>& center_point);
3909 template <
typename T>
3911 const point2d<T>& center_point);
3912 template <
typename T>
3914 const point3d<T>& center_point);
3915 template <
typename T>
3917 const point2d<T>& center_point);
3918 template <
typename T>
3920 const point2d<T>& center_point);
3921 template <
typename T>
3923 const point2d<T>& center_point);
3925 template <
typename T>
3926 inline void shorten_segment(T& x1, T& y1, T& x2, T& y2,
const T& amount);
3927 template <
typename T>
3930 template <
typename T>
3933 template <
typename T>
3937 template <
typename T>
3939 template <
typename T>
3942 template <
typename T>
3945 template <
typename T>
3949 template <
typename T>
3950 inline int out_code(
const point2d<T>& point,
const rectangle<T>& rectangle);
3952 template <
typename T>
3953 inline bool clip(
const T& x1,
const T& y1,
const T& x2,
const T& y2,
3954 const T& x3,
const T& y3,
const T& x4,
const T& y4, T& cx1,
3955 T& cy1, T& cx2, T& cy2);
3957 template <
typename T>
3958 inline bool clip(
const T& x1,
const T& y1,
const T& z1,
const T& x2,
3959 const T& y2,
const T& z2,
const T& x3,
const T& y3,
3960 const T& z3,
const T& x4,
const T& y4,
const T& z4, T& cx1,
3961 T& cy1, T& cz1, T& cx2, T& cy2, T& cz2);
3963 template <
typename T>
3964 inline bool clip(
const segment<T, 2>& src_segment,
3965 const rectangle<T>& rectangle, segment<T, 2>& csegment);
3966 template <
typename T>
3967 inline bool clip(
const segment<T, 2>& src_segment,
3968 const triangle<T, 2>& triangle, segment<T, 2>& csegment);
3969 template <
typename T>
3970 inline bool clip(
const segment<T, 2>& src_segment,
const quadix<T, 2>& quadix,
3971 segment<T, 2>& csegment);
3972 template <
typename T>
3973 inline bool clip(
const segment<T, 2>& src_segment,
const circle<T>& circle,
3974 segment<T, 2>& csegment);
3975 template <
typename T>
3976 inline bool clip(
const rectangle<T>& rectangle1,
const rectangle<T>& rectangle2,
3977 rectangle<T>& crectangle);
3978 template <
typename T>
3979 inline bool clip(
const box<T, 3>& box1,
const box<T, 3>& box2, box<T, 3>& cbox);
3981 template <
typename T>
3982 inline T
area(
const point2d<T>& point1,
const point2d<T>& point2,
3983 const point2d<T>& point3);
3984 template <
typename T>
3985 inline T
area(
const point3d<T>& point1,
const point3d<T>& point2,
3986 const point3d<T>& point3);
3987 template <
typename T>
3988 inline T
area(
const triangle<T, 2>& triangle);
3989 template <
typename T>
3990 inline T
area(
const triangle<T, 3>& triangle);
3991 template <
typename T>
3992 inline T
area(
const quadix<T, 2>& quadix);
3993 template <
typename T>
3994 inline T
area(
const quadix<T, 3>& quadix);
3995 template <
typename T>
3996 inline T
area(
const rectangle<T>& rectangle);
3997 template <
typename T>
3998 inline T
area(
const circle<T>& circle);
3999 template <
typename T>
4000 inline T
area(
const polygon<T, 2>& polygon);
4002 template <
typename T>
4003 inline T
perimeter(
const point2d<T>& point1,
const point2d<T>& point2,
4004 const point2d<T>& point3);
4005 template <
typename T>
4006 inline T
perimeter(
const point3d<T>& point1,
const point3d<T>& point2,
4007 const point3d<T>& point3);
4008 template <
typename T>
4009 inline T
perimeter(
const triangle<T, 2>& triangle);
4010 template <
typename T>
4011 inline T
perimeter(
const triangle<T, 3>& triangle);
4012 template <
typename T>
4013 inline T
perimeter(
const quadix<T, 2>& quadix);
4014 template <
typename T>
4015 inline T
perimeter(
const quadix<T, 3>& quadix);
4016 template <
typename T>
4017 inline T
perimeter(
const rectangle<T>& rectangle);
4018 template <
typename T>
4019 inline T
perimeter(
const circle<T>& circle);
4020 template <
typename T>
4021 inline T
perimeter(
const polygon<T, 2>& polygon);
4023 template <
typename T>
4024 inline void rotate(
const T& rotation_angle,
const T& x,
const T& y, T& nx,
4026 template <
typename T>
4027 inline void rotate(
const T& rotation_angle,
const T& x,
const T& y,
const T& ox,
4028 const T& oy, T& nx, T& ny);
4030 template <
typename T>
4031 inline point2d<T>
rotate(
const T& rotation_angle,
const point2d<T>& point);
4032 template <
typename T>
4033 inline point2d<T>
rotate(
const T& rotation_angle,
const point2d<T>& point,
4034 const point2d<T>& opoint);
4036 template <
typename T>
4037 inline segment<T, 2>
rotate(
const T& rotation_angle,
4038 const segment<T, 2>& segment);
4039 template <
typename T>
4040 inline segment<T, 2>
rotate(
const T& rotation_angle,
4041 const segment<T, 2>& segment,
4042 const point2d<T>& opoint);
4044 template <
typename T>
4045 inline triangle<T, 2>
rotate(
const T& rotation_angle,
4046 const triangle<T, 2>& triangle);
4047 template <
typename T>
4048 inline triangle<T, 2>
rotate(
const T& rotation_angle,
4049 const triangle<T, 2>& triangle,
4050 const point2d<T>& opoint);
4052 template <
typename T>
4053 inline quadix<T, 2>
rotate(
const T& rotation_angle,
const quadix<T, 2>& quadix);
4054 template <
typename T>
4055 inline quadix<T, 2>
rotate(
const T& rotation_angle,
const quadix<T, 2>& quadix,
4056 const point2d<T>& opoint);
4058 template <
typename T>
4059 inline polygon<T, 2>
rotate(
const T& rotation_angle,
4060 const polygon<T, 2>& polygon);
4061 template <
typename T>
4062 inline polygon<T, 2>
rotate(
const T& rotation_angle,
4063 const polygon<T, 2>& polygon,
4064 const point2d<T>& opoint);
4066 template <
typename T>
4067 inline void fast_rotate(
const trig_luts<T>& lut,
const int rotation_angle,
4068 const T& x,
const T& y, T& nx, T& ny);
4070 template <
typename T>
4071 inline void fast_rotate(
const trig_luts<T>& lut,
const int rotation_angle,
4072 const T& x,
const T& y,
const T& ox,
const T& oy, T& nx,
4075 template <
typename T>
4076 inline point2d<T>
fast_rotate(
const trig_luts<T>& lut,
const int rotation_angle,
4077 const point2d<T>& point);
4078 template <
typename T>
4079 inline point2d<T>
fast_rotate(
const trig_luts<T>& lut,
const int rotation_angle,
4080 const point2d<T>& point,
4081 const point2d<T>& opoint);
4083 template <
typename T>
4084 inline segment<T, 2>
fast_rotate(
const trig_luts<T>& lut,
4085 const int rotation_angle,
4086 const segment<T, 2>& segment);
4087 template <
typename T>
4088 inline segment<T, 2>
fast_rotate(
const trig_luts<T>& lut,
4089 const int rotation_angle,
4090 const segment<T, 2>& segment,
4091 const point2d<T>& opoint);
4093 template <
typename T>
4094 inline triangle<T, 2>
fast_rotate(
const trig_luts<T>& lut,
4095 const int rotation_angle,
4096 const triangle<T, 2>& triangle);
4097 template <
typename T>
4098 inline triangle<T, 2>
fast_rotate(
const trig_luts<T>& lut,
4099 const int rotation_angle,
4100 const triangle<T, 2>& triangle,
4101 const point2d<T>& opoint);
4103 template <
typename T>
4104 inline quadix<T, 2>
fast_rotate(
const trig_luts<T>& lut,
4105 const int rotation_angle,
4106 const quadix<T, 2>& quadix);
4107 template <
typename T>
4108 inline quadix<T, 2>
fast_rotate(
const trig_luts<T>& lut,
4109 const int rotation_angle,
4110 const quadix<T, 2>& quadix,
4111 const point2d<T>& opoint);
4113 template <
typename T>
4114 inline polygon<T, 2>
fast_rotate(
const trig_luts<T>& lut,
4115 const int rotation_angle,
4116 const polygon<T, 2>& polygon);
4117 template <
typename T>
4118 inline polygon<T, 2>
fast_rotate(
const trig_luts<T>& lut,
4119 const int rotation_angle,
4120 const polygon<T, 2>& polygon,
4121 const point2d<T>& opoint);
4123 template <
typename T>
4124 inline void fast_rotate(
const trig_luts<T>& lut,
const int rx,
const int ry,
4125 const int rz,
const T& x,
const T& y,
const T& z, T& nx,
4128 template <
typename T>
4129 inline void fast_rotate(
const trig_luts<T>& lut,
const int rx,
const int ry,
4130 const int rz,
const T& x,
const T& y,
const T& z,
4131 const T& ox,
const T& oy,
const T& oz, T& nx, T& ny,
4134 template <
typename T>
4135 inline point3d<T>
fast_rotate(
const trig_luts<T>& lut,
const int rx,
4136 const int ry,
const int rz,
4137 const point3d<T>& point);
4138 template <
typename T>
4139 inline point3d<T>
fast_rotate(
const trig_luts<T>& lut,
const int rx,
4140 const int ry,
const int rz,
4141 const point3d<T>& point,
4142 const point3d<T>& opoint);
4144 template <
typename T>
4145 inline segment<T, 3>
fast_rotate(
const trig_luts<T>& lut,
const int rx,
4146 const int ry,
const int rz,
4147 const segment<T, 3>& segment);
4148 template <
typename T>
4149 inline segment<T, 3>
fast_rotate(
const trig_luts<T>& lut,
const int rx,
4150 const int ry,
const int rz,
4151 const segment<T, 3>& segment,
4152 const point3d<T>& opoint);
4154 template <
typename T>
4155 inline triangle<T, 3>
fast_rotate(
const trig_luts<T>& lut,
const int rx,
4156 const int ry,
const int rz,
4157 const triangle<T, 3>& triangle);
4158 template <
typename T>
4159 inline triangle<T, 3>
fast_rotate(
const trig_luts<T>& lut,
const int rx,
4160 const int ry,
const int rz,
4161 const triangle<T, 3>& triangle,
4162 const point3d<T>& opoint);
4164 template <
typename T>
4165 inline quadix<T, 3>
fast_rotate(
const trig_luts<T>& lut,
const int rx,
4166 const int ry,
const int rz,
4167 const quadix<T, 3>& quadix);
4168 template <
typename T>
4169 inline quadix<T, 3>
fast_rotate(
const trig_luts<T>& lut,
const int rx,
4170 const int ry,
const int rz,
4171 const quadix<T, 3>& quadix,
4172 const point3d<T>& opoint);
4174 template <
typename T>
4175 inline polygon<T, 3>
fast_rotate(
const trig_luts<T>& lut,
const int rx,
4176 const int ry,
const int rz,
4177 const polygon<T, 3>& polygon);
4178 template <
typename T>
4179 inline polygon<T, 3>
fast_rotate(
const trig_luts<T>& lut,
const int rx,
4180 const int ry,
const int rz,
4181 const polygon<T, 3>& polygon,
4182 const point3d<T>& opoint);
4184 template <
typename T>
4185 inline point2d<T>
translate(
const T& dx,
const T& dy,
const point2d<T>& point);
4186 template <
typename T>
4187 inline line<T, 2>
translate(
const T& dx,
const T& dy,
const line<T, 2>& line);
4188 template <
typename T>
4189 inline segment<T, 2>
translate(
const T& dx,
const T& dy,
4190 const segment<T, 2>& segment);
4191 template <
typename T>
4192 inline triangle<T, 2>
translate(
const T& dx,
const T& dy,
4193 const triangle<T, 2>& triangle);
4194 template <
typename T>
4195 inline quadix<T, 2>
translate(
const T& dx,
const T& dy,
4196 const quadix<T, 2>& quadix);
4197 template <
typename T>
4198 inline rectangle<T>
translate(
const T& dx,
const T& dy,
4199 const rectangle<T>& rectangle);
4200 template <
typename T>
4201 inline circle<T>
translate(
const T& dx,
const T& dy,
const circle<T>& circle);
4202 template <
typename T>
4203 inline polygon<T, 2>
translate(
const T& dx,
const T& dy,
4204 const polygon<T, 2>& polygon);
4206 template <
typename T>
4207 inline point2d<T>
translate(
const T& delta,
const point2d<T>& point);
4208 template <
typename T>
4209 inline line<T, 2>
translate(
const T& delta,
const line<T, 2>& line);
4210 template <
typename T>
4211 inline segment<T, 2>
translate(
const T& delta,
const segment<T, 2>& segment);
4212 template <
typename T>
4213 inline triangle<T, 2>
translate(
const T& delta,
const triangle<T, 2>& triangle);
4214 template <
typename T>
4215 inline quadix<T, 2>
translate(
const T& delta,
const quadix<T, 2>& quadix);
4216 template <
typename T>
4217 inline rectangle<T>
translate(
const T& delta,
const rectangle<T>& rectangle);
4218 template <
typename T>
4219 inline circle<T>
translate(
const T& delta,
const circle<T>& circle);
4220 template <
typename T>
4221 inline polygon<T, 2>
translate(
const T& delta,
const polygon<T, 2>& polygon);
4223 template <
typename T>
4224 inline point2d<T>
translate(
const vector2d<T>& v,
const point2d<T>& point);
4225 template <
typename T>
4226 inline line<T, 2>
translate(
const vector2d<T>& v,
const line<T, 2>& line);
4227 template <
typename T>
4228 inline segment<T, 2>
translate(
const vector2d<T>& v,
4229 const segment<T, 2>& segment);
4230 template <
typename T>
4231 inline triangle<T, 2>
translate(
const vector2d<T>& v,
4232 const triangle<T, 2>& triangle);
4233 template <
typename T>
4234 inline quadix<T, 2>
translate(
const vector2d<T>& v,
const quadix<T, 2>& quadix);
4235 template <
typename T>
4236 inline rectangle<T>
translate(
const vector2d<T>& v,
4237 const rectangle<T>& rectangle);
4238 template <
typename T>
4239 inline circle<T>
translate(
const vector2d<T>& v,
const circle<T>& circle);
4240 template <
typename T>
4241 inline polygon<T, 2>
translate(
const vector2d<T>& v,
4242 const polygon<T, 2>& polygon);
4244 template <
typename T>
4245 inline point3d<T>
translate(
const T& dx,
const T& dy,
const T& dz,
4246 const point3d<T>& point);
4247 template <
typename T>
4248 inline line<T, 3>
translate(
const T& dx,
const T& dy,
const T& dz,
4249 const line<T, 3>& line);
4250 template <
typename T>
4251 inline segment<T, 3>
translate(
const T& dx,
const T& dy,
const T& dz,
4252 const segment<T, 3>& segment);
4253 template <
typename T>
4254 inline triangle<T, 3>
translate(
const T& dx,
const T& dy,
const T& dz,
4255 const triangle<T, 3>& triangle);
4256 template <
typename T>
4257 inline quadix<T, 3>
translate(
const T& dx,
const T& dy,
const T& dz,
4258 const quadix<T, 3>& quadix);
4259 template <
typename T>
4260 inline box<T, 3>
translate(
const T& dx,
const T& dy,
const T& dz,
4261 const box<T, 3>& box);
4262 template <
typename T>
4263 inline sphere<T>
translate(
const T& dx,
const T& dy,
const T& dz,
4264 const sphere<T>& sphere);
4265 template <
typename T>
4266 inline polygon<T, 3>
translate(
const T& dx,
const T& dy,
const T& dz,
4267 const polygon<T, 3>& polygon);
4269 template <
typename T>
4270 inline point3d<T>
translate(
const T& delta,
const point3d<T>& point);
4271 template <
typename T>
4272 inline line<T, 3>
translate(
const T& delta,
const line<T, 3>& line);
4273 template <
typename T>
4274 inline segment<T, 3>
translate(
const T& delta,
const segment<T, 3>& segment);
4275 template <
typename T>
4276 inline triangle<T, 3>
translate(
const T& delta,
const triangle<T, 3>& triangle);
4277 template <
typename T>
4278 inline quadix<T, 3>
translate(
const T& delta,
const quadix<T, 3>& quadix);
4279 template <
typename T>
4280 inline box<T, 3>
translate(
const T& delta,
const box<T, 3>& box);
4281 template <
typename T>
4282 inline sphere<T>
translate(
const T& delta,
const sphere<T>& sphere);
4283 template <
typename T>
4284 inline polygon<T, 3>
translate(
const T& delta,
const polygon<T, 3>& polygon);
4286 template <
typename T>
4287 inline point3d<T>
translate(
const vector3d<T>& v,
const point3d<T>& point);
4288 template <
typename T>
4289 inline line<T, 3>
translate(
const vector3d<T>& v,
const line<T, 3>& line);
4290 template <
typename T>
4291 inline segment<T, 3>
translate(
const vector3d<T>& v,
4292 const segment<T, 3>& segment);
4293 template <
typename T>
4294 inline triangle<T, 3>
translate(
const vector3d<T>& v,
4295 const triangle<T, 3>& triangle);
4296 template <
typename T>
4297 inline quadix<T, 3>
translate(
const vector3d<T>& v,
const quadix<T, 3>& quadix);
4298 template <
typename T>
4299 inline box<T, 3>
translate(
const vector3d<T>& v,
const box<T, 3>& box);
4300 template <
typename T>
4301 inline sphere<T>
translate(
const vector3d<T>& v,
const sphere<T>& sphere);
4302 template <
typename T>
4303 inline polygon<T, 3>
translate(
const vector3d<T>& v,
4304 const polygon<T, 3>& polygon);
4306 template <
typename T>
4307 inline point2d<T>
scale(
const T& dx,
const T& dy,
const point2d<T>& point);
4308 template <
typename T>
4309 inline line<T, 2>
scale(
const T& dx,
const T& dy,
const line<T, 2>& line);
4310 template <
typename T>
4311 inline segment<T, 2>
scale(
const T& dx,
const T& dy,
4312 const segment<T, 2>& segment);
4313 template <
typename T>
4314 inline triangle<T, 2>
scale(
const T& dx,
const T& dy,
4315 const triangle<T, 2>& triangle);
4316 template <
typename T>
4317 inline quadix<T, 2>
scale(
const T& dx,
const T& dy,
const quadix<T, 2>& quadix);
4318 template <
typename T>
4319 inline rectangle<T>
scale(
const T& dx,
const T& dy,
4320 const rectangle<T>& rectangle);
4321 template <
typename T>
4322 inline circle<T>
scale(
const T& dr,
const circle<T>& circle);
4323 template <
typename T>
4324 inline polygon<T, 2>
scale(
const T& dx,
const T& dy,
4325 const polygon<T, 2>& polygon);
4327 template <
typename T>
4328 inline point3d<T>
scale(
const T& dx,
const T& dy,
const T& dz,
4329 const point3d<T>& point);
4330 template <
typename T>
4331 inline line<T, 3>
scale(
const T& dx,
const T& dy,
const T& dz,
4332 const line<T, 3>& line);
4333 template <
typename T>
4334 inline segment<T, 3>
scale(
const T& dx,
const T& dy,
const T& dz,
4335 const segment<T, 3>& segment);
4336 template <
typename T>
4337 inline triangle<T, 3>
scale(
const T& dx,
const T& dy,
const T& dz,
4338 const triangle<T, 3>& triangle);
4339 template <
typename T>
4340 inline quadix<T, 3>
scale(
const T& dx,
const T& dy,
const T& dz,
4341 const quadix<T, 3>& quadix);
4342 template <
typename T>
4343 inline box<T, 3>
scale(
const T& dx,
const T& dy,
const T& dz,
4344 const box<T, 3>& box);
4345 template <
typename T>
4346 inline sphere<T>
scale(
const T& dr,
const sphere<T>& sphere);
4347 template <
typename T>
4348 inline polygon<T, 3>
scale(
const T& dx,
const T& dy,
const T& dz,
4349 const polygon<T, 3>& polygon);
4351 template <
typename T>
4352 inline rectangle<T>
aabb(
const segment<T, 2>& segment);
4353 template <
typename T>
4354 inline rectangle<T>
aabb(
const triangle<T, 2>& triangle);
4355 template <
typename T>
4356 inline rectangle<T>
aabb(
const rectangle<T>& rectangle);
4357 template <
typename T>
4358 inline rectangle<T>
aabb(
const quadix<T, 2>& quadix);
4359 template <
typename T>
4360 inline rectangle<T>
aabb(
const circle<T>& circle);
4361 template <
typename T>
4362 inline rectangle<T>
aabb(
const polygon<T, 2>& polygon);
4364 template <
typename T>
4365 inline void aabb(
const segment<T, 2>& segment, T& x1, T& y1, T& x2, T& y2);
4366 template <
typename T>
4367 inline void aabb(
const triangle<T, 2>& triangle, T& x1, T& y1, T& x2, T& y2);
4368 template <
typename T>
4369 inline void aabb(
const rectangle<T>& rectangle, T& x1, T& y1, T& x2, T& y2);
4370 template <
typename T>
4371 inline void aabb(
const quadix<T, 2>& quadix, T& x1, T& y1, T& x2, T& y2);
4372 template <
typename T>
4373 inline void aabb(
const circle<T>& circle, T& x1, T& y1, T& x2, T& y2);
4374 template <
typename T>
4375 inline void aabb(
const polygon<T, 2>& polygon, T& x1, T& y1, T& x2, T& y2);
4377 template <
typename T>
4378 inline box<T, 3>
aabb(
const segment<T, 3>& segment);
4379 template <
typename T>
4380 inline box<T, 3>
aabb(
const triangle<T, 3>& triangle);
4381 template <
typename T>
4382 inline box<T, 3>
aabb(
const box<T, 3>& rectangle);
4383 template <
typename T>
4384 inline box<T, 3>
aabb(
const quadix<T, 3>& quadix);
4385 template <
typename T>
4386 inline box<T, 3>
aabb(
const sphere<T>& sphere);
4387 template <
typename T>
4388 inline box<T, 3>
aabb(
const polygon<T, 3>& polygon);
4390 template <
typename T>
4391 inline void aabb(
const segment<T, 3>& segment, T& x1, T& y1, T& z1, T& x2,
4393 template <
typename T>
4394 inline void aabb(
const triangle<T, 3>& triangle, T& x1, T& y1, T& z1, T& x2,
4396 template <
typename T>
4397 inline void aabb(
const box<T, 3>& box, T& x1, T& y1, T& z1, T& x2, T& y2,
4399 template <
typename T>
4400 inline void aabb(
const quadix<T, 3>& quadix, T& x1, T& y1, T& z1, T& x2, T& y2,
4402 template <
typename T>
4403 inline void aabb(
const sphere<T>& sphere, T& x1, T& y1, T& z1, T& x2, T& y2,
4405 template <
typename T>
4406 inline void aabb(
const polygon<T, 3>& polygon, T& x1, T& y1, T& z1, T& x2,
4409 template <
typename T>
4412 template <
typename T>
4413 inline box<T, 3>
update_box(
const box<T, 3>& box, point3d<T>& point);
4414 template <
typename T>
4415 inline circle<T>
update_circle(
const circle<T>& circle, point2d<T>& point);
4416 template <
typename T>
4417 inline sphere<T>
update_sphere(
const sphere<T>& sphere, point3d<T>& point);
4419 template <
typename T>
4422 template <
typename T>
4425 template <
typename T>
4427 template <
typename T>
4430 template <
typename T>
4433 template <
typename T>
4435 template <
typename T>
4437 template <
typename T>
4439 template <
typename T>
4441 template <
typename T>
4443 template <
typename T>
4445 template <
typename T>
4447 template <
typename T>
4449 template <
typename T>
4451 template <
typename T>
4454 template <
typename T,
typename OutputIterator>
4456 const T& y2,
const std::size_t& point_count,
4457 OutputIterator out);
4458 template <
typename T,
typename OutputIterator>
4460 const T& x2,
const T& y2,
const T& z2,
4461 const std::size_t& point_count,
4462 OutputIterator out);
4463 template <
typename T,
typename OutputIterator>
4465 const std::size_t& point_count,
4466 OutputIterator out);
4467 template <
typename T,
typename OutputIterator>
4469 const std::size_t& point_count,
4470 OutputIterator out);
4471 template <
typename T,
typename OutputIterator>
4473 const std::size_t& point_count,
4474 OutputIterator out);
4475 template <
typename T,
typename OutputIterator>
4477 const std::size_t& point_count,
4478 OutputIterator out);
4479 template <
typename T,
typename OutputIterator>
4481 const std::size_t& point_count,
4482 OutputIterator out);
4483 template <
typename T,
typename OutputIterator>
4485 const std::size_t& point_count,
4486 OutputIterator out);
4487 template <
typename T,
typename OutputIterator>
4489 const std::size_t& point_count,
4490 OutputIterator out);
4491 template <
typename T,
typename OutputIterator>
4493 const std::size_t& point_count,
4494 OutputIterator out);
4495 template <
typename T,
typename OutputIterator>
4497 const std::size_t& point_count,
4498 OutputIterator out);
4500 template <
typename T>
4502 const T& y2, segment<T, 2>& segment);
4503 template <
typename T>
4505 const T& y2, rectangle<T>& rectangle);
4506 template <
typename T>
4508 const T& y2, triangle<T, 2>& triangle);
4509 template <
typename T>
4511 const T& y2, quadix<T, 2>& quadix);
4512 template <
typename T>
4514 const T& y2, circle<T>& circle);
4515 template <
typename T>
4517 const T& x2,
const T& y2,
const T& z2,
4520 template <
typename T>
4521 inline triangle<T, 2>
right_shift(
const triangle<T, 2>& triangle,
4522 const std::size_t& shift);
4524 template <
typename T>
4525 inline triangle<T, 3>
right_shift(
const triangle<T, 3>& triangle,
4526 const std::size_t& shift);
4528 template <
typename T>
4529 inline quadix<T, 2>
right_shift(
const quadix<T, 2>& quadix,
4530 const std::size_t& shift);
4532 template <
typename T>
4533 inline quadix<T, 3>
right_shift(
const quadix<T, 3>& quadix,
4534 const std::size_t& shift);
4536 template <
typename T>
4538 template <
typename T>
4541 template <
typename T>
4542 inline vector2d<T>
normalize(
const vector2d<T>& v);
4543 template <
typename T>
4544 inline vector3d<T>
normalize(
const vector3d<T>& v);
4546 template <
typename T>
4548 template <
typename T>
4551 template <
typename T>
4552 inline vector2d<T>
operator+(
const vector2d<T>& v1,
const vector2d<T>& v2);
4553 template <
typename T>
4554 inline vector3d<T>
operator+(
const vector3d<T>& v1,
const vector3d<T>& v2);
4556 template <
typename T>
4557 inline vector2d<T>
operator-(
const vector2d<T>& v1,
const vector2d<T>& v2);
4558 template <
typename T>
4559 inline vector3d<T>
operator-(
const vector3d<T>& v1,
const vector3d<T>& v2);
4561 template <
typename T>
4562 inline T
operator*(
const vector2d<T>& v1,
const vector2d<T>& v2);
4563 template <
typename T>
4564 inline vector3d<T>
operator*(
const vector3d<T>& v1,
const vector3d<T>& v2);
4566 template <
typename T>
4567 inline T
dot_product(
const vector2d<T>& v1,
const vector2d<T>& v2);
4568 template <
typename T>
4569 inline T
dot_product(
const vector3d<T>& v1,
const vector3d<T>& v2);
4571 template <
typename T>
4573 template <
typename T>
4574 inline T
triple_product(
const vector3d<T>& v1,
const vector3d<T>& v2,
4575 const vector3d<T>& v3);
4577 template <
typename T>
4578 inline vector2d<T>
operator*(
const vector2d<T>& v1,
const T&
scale);
4579 template <
typename T>
4580 inline vector3d<T>
operator*(
const vector3d<T>& v1,
const T&
scale);
4581 template <
typename T>
4582 inline vector2d<T>
operator*(
const T&
scale,
const vector2d<T>& v1);
4583 template <
typename T>
4584 inline vector3d<T>
operator*(
const T&
scale,
const vector3d<T>& v1);
4586 template <
typename T>
4587 inline vector2d<T>
operator/(
const vector2d<T>& v1,
const T&
scale);
4588 template <
typename T>
4589 inline vector3d<T>
operator/(
const vector3d<T>& v1,
const T&
scale);
4591 template <
typename T>
4592 inline point2d<T>
operator*(
const point2d<T>& point,
const T&
scale);
4593 template <
typename T>
4594 inline point3d<T>
operator*(
const point3d<T>& point,
const T&
scale);
4595 template <
typename T>
4596 inline point2d<T>
operator*(
const T&
scale,
const point2d<T>& point);
4597 template <
typename T>
4598 inline point3d<T>
operator*(
const T&
scale,
const point3d<T>& point);
4600 template <
typename T>
4601 inline point2d<T>
operator+(
const point2d<T>& point,
const vector2d<T>& v);
4602 template <
typename T>
4603 inline point2d<T>
operator+(
const vector2d<T>& v,
const point2d<T>& point);
4605 template <
typename T>
4606 inline point3d<T>
operator+(
const point3d<T>& point,
const vector3d<T>& v);
4607 template <
typename T>
4608 inline point3d<T>
operator+(
const vector3d<T>& v,
const point3d<T>& point);
4610 template <
typename T>
4611 inline vector2d<T>
operator-(
const point2d<T>& p1,
const point2d<T>& p2);
4612 template <
typename T>
4613 inline vector3d<T>
operator-(
const point3d<T>& p1,
const point3d<T>& p2);
4615 template <
typename T>
4616 inline point2d<T>
operator+(
const point2d<T>& p1,
const point2d<T>& p2);
4617 template <
typename T>
4618 inline point3d<T>
operator+(
const point3d<T>& p1,
const point3d<T>& p2);
4620 template <
typename T>
4622 template <
typename T>
4623 inline bool is_equal(
const point2d<T>& point1,
const point2d<T>& point2,
4625 template <
typename T>
4626 inline bool is_equal(
const point3d<T>& point1,
const point3d<T>& point2,
4629 template <
typename T>
4630 inline bool is_equal(
const T& val1,
const T& val2);
4631 template <
typename T>
4632 inline bool is_equal(
const point2d<T>& point1,
const point2d<T>& point2);
4633 template <
typename T>
4634 inline bool is_equal(
const point3d<T>& point1,
const point3d<T>& point2);
4636 template <
typename T>
4637 inline bool is_equal(
const rectangle<T>& rectangle1,
4638 const rectangle<T>& rectangle2);
4639 template <
typename T>
4640 inline bool is_equal(
const circle<T>& circle1,
const circle<T>& circle2);
4642 template <
typename T>
4643 inline bool is_equal(
const box<T, 3>& box1,
const box<T, 3>& box2);
4644 template <
typename T>
4645 inline bool is_equal(
const sphere<T>& sphere1,
const sphere<T>& sphere2);
4647 template <
typename T>
4649 template <
typename T>
4650 inline bool not_equal(
const point2d<T>& point1,
const point2d<T>& point2,
4652 template <
typename T>
4653 inline bool not_equal(
const point3d<T>& point1,
const point3d<T>& point2,
4656 template <
typename T>
4657 inline bool not_equal(
const T& val1,
const T& val2);
4658 template <
typename T>
4659 inline bool not_equal(
const point2d<T>& point1,
const point2d<T>& point2);
4660 template <
typename T>
4661 inline bool not_equal(
const point3d<T>& point1,
const point3d<T>& point2);
4663 template <
typename T>
4664 inline bool not_equal(
const rectangle<T>& rectangle1,
4665 const rectangle<T>& rectangle2);
4666 template <
typename T>
4667 inline bool not_equal(
const circle<T>& circle1,
const circle<T>& circle2);
4669 template <
typename T>
4670 inline bool not_equal(
const box<T, 3>& box1,
const box<T, 3>& box2);
4671 template <
typename T>
4672 inline bool not_equal(
const sphere<T>& sphere1,
const sphere<T>& sphere2);
4674 template <
typename T>
4676 template <
typename T>
4679 template <
typename T>
4682 template <
typename T>
4685 template <
typename T>
4686 inline bool operator<(
const point2d<T>& point1,
const point2d<T>& point2);
4687 template <
typename T>
4688 inline bool operator<(
const point3d<T>& point1,
const point3d<T>& point2);
4689 template <
typename T>
4690 inline bool operator>(
const point2d<T>& point1,
const point2d<T>& point2);
4691 template <
typename T>
4692 inline bool operator>(
const point3d<T>& point1,
const point3d<T>& point2);
4694 template <
typename T>
4695 inline bool operator==(
const point2d<T>& point1,
const point2d<T>& point2);
4696 template <
typename T>
4697 inline bool operator==(
const point3d<T>& point1,
const point3d<T>& point2);
4699 template <
typename T>
4700 inline bool is_degenerate(
const T& x1,
const T& y1,
const T& x2,
const T& y2);
4701 template <
typename T>
4703 template <
typename T>
4706 template <
typename T>
4707 inline bool is_degenerate(
const T& x1,
const T& y1,
const T& z1,
const T& x2,
4708 const T& y2,
const T& z2);
4709 template <
typename T>
4711 template <
typename T>
4714 template <
typename T>
4716 template <
typename T>
4719 template <
typename T>
4721 template <
typename T>
4724 template <
typename T>
4726 template <
typename T>
4728 template <
typename T>
4730 template <
typename T>
4733 template <
typename T>
4735 template <
typename T>
4737 template <
typename T>
4739 template <
typename T>
4741 template <
typename T>
4743 template <
typename T>
4745 template <
typename T>
4747 template <
typename T>
4749 template <
typename T>
4751 template <
typename T>
4753 template <
typename T>
4755 template <
typename T>
4757 template <
typename T>
4759 template <
typename T>
4761 template <
typename T>
4763 template <
typename T>
4765 template <
typename T>
4768 template <
typename T>
4770 template <
typename T>
4772 template <
typename T>
4774 template <
typename T>
4777 template <
typename T>
4778 inline void swap(point2d<T>& point1, point2d<T>& point2);
4779 template <
typename T>
4780 inline void swap(point3d<T>& point1, point3d<T>& point2);
4782 template <
typename T>
4783 inline point2d<T>
make_point(
const T& x,
const T& y);
4784 template <
typename T>
4785 inline point3d<T>
make_point(
const T& x,
const T& y,
const T& z);
4787 template <
typename T>
4788 inline point2d<T>
make_point(
const point3d<T> point);
4789 template <
typename T>
4790 inline point3d<T>
make_point(
const point2d<T> point,
const T& z = T(0.0));
4792 template <
typename T>
4793 inline point2d<T>
make_point(
const circle<T>& circle);
4794 template <
typename T>
4795 inline point3d<T>
make_point(
const sphere<T>& sphere);
4797 template <
typename T>
4798 inline vector2d<T>
make_vector(
const T& x,
const T& y);
4799 template <
typename T>
4800 inline vector3d<T>
make_vector(
const T& x,
const T& y,
const T& z);
4802 template <
typename T>
4803 inline vector2d<T>
make_vector(
const vector3d<T> v);
4804 template <
typename T>
4805 inline vector3d<T>
make_vector(
const vector2d<T> v,
const T& z = T(0.0));
4807 template <
typename T>
4808 inline vector2d<T>
make_vector(
const point2d<T> point);
4809 template <
typename T>
4810 inline vector3d<T>
make_vector(
const point3d<T> point);
4812 template <
typename T>
4813 inline ray<T, 2>
make_ray(
const T& ox,
const T& oy,
const T& dir_x,
4815 template <
typename T>
4816 inline ray<T, 3>
make_ray(
const T& ox,
const T& oy,
const T& oz,
const T& dir_x,
4817 const T& dir_y,
const T& dir_z);
4819 template <
typename T>
4820 inline ray<T, 2>
make_ray(
const point2d<T>& origin,
4821 const vector2d<T>& direction);
4822 template <
typename T>
4823 inline ray<T, 3>
make_ray(
const point3d<T>& origin,
4824 const vector3d<T>& direction);
4826 template <
typename T>
4827 inline ray<T, 2>
make_ray(
const point2d<T>& origin,
const T& bearing);
4829 template <
typename T>
4830 inline curve_point<T, 2>
make_curve_point(
const T& x,
const T& y,
const T& t);
4831 template <
typename T>
4832 inline curve_point<T, 3>
make_curve_point(
const T& x,
const T& y,
const T& z,
4835 template <
typename T>
4836 inline curve_point<T, 2>
make_curve_point(
const point2d<T>& point,
const T& t);
4837 template <
typename T>
4838 inline curve_point<T, 3>
make_curve_point(
const point3d<T>& point,
const T& t);
4840 template <
typename T>
4841 inline segment<T, 2>
make_segment(
const T& x1,
const T& y1,
const T& x2,
4843 template <
typename T>
4844 inline segment<T, 3>
make_segment(
const T& x1,
const T& y1,
const T& z1,
4845 const T& x2,
const T& y2,
const T& z2);
4847 template <
typename T>
4848 inline segment<T, 2>
make_segment(
const point2d<T>& point1,
4849 const point2d<T>& point2);
4850 template <
typename T>
4851 inline segment<T, 3>
make_segment(
const point3d<T>& point1,
4852 const point3d<T>& point2);
4854 template <
typename T>
4855 inline segment<T, 2>
make_segment(
const line<T, 2>& line);
4856 template <
typename T>
4857 inline segment<T, 3>
make_segment(
const line<T, 3>& line);
4859 template <
typename T>
4860 inline line<T, 2>
make_line(
const T& x1,
const T& y1,
const T& x2,
const T& y2);
4861 template <
typename T>
4862 inline line<T, 3>
make_line(
const T& x1,
const T& y1,
const T& z1,
const T& x2,
4863 const T& y2,
const T& z2);
4865 template <
typename T>
4866 inline line<T, 2>
make_line(
const point2d<T>& point1,
const point2d<T>& point2);
4867 template <
typename T>
4868 inline line<T, 3>
make_line(
const point3d<T>& point1,
const point3d<T>& point2);
4870 template <
typename T>
4871 inline line<T, 2>
make_line(
const segment<T, 2>& segment);
4872 template <
typename T>
4873 inline line<T, 3>
make_line(
const segment<T, 3>& segment);
4875 template <
typename T>
4876 inline line<T, 2>
make_line(
const ray<T, 2>& ray);
4877 template <
typename T>
4878 inline line<T, 3>
make_line(
const ray<T, 3>& ray);
4880 template <
typename T>
4881 inline rectangle<T>
make_rectangle(
const T& x1,
const T& y1,
const T& x2,
4883 template <
typename T>
4885 const point2d<T>& point2);
4887 template <
typename T>
4888 inline box<T, 3>
make_box(
const T& x1,
const T& y1,
const T& z1,
const T& x2,
4889 const T& y2,
const T& z2);
4890 template <
typename T>
4891 inline box<T, 3>
make_box(
const point3d<T>& point1,
const point3d<T>& point2);
4893 template <
typename T>
4894 inline triangle<T, 2>
make_triangle(
const T& x1,
const T& y1,
const T& x2,
4895 const T& y2,
const T& x3,
const T& y3);
4897 template <
typename T>
4898 inline triangle<T, 3>
make_triangle(
const T& x1,
const T& y1,
const T& z1,
4899 const T& x2,
const T& y2,
const T& z2,
4900 const T& x3,
const T& y3,
const T& z3);
4902 template <
typename T>
4903 inline triangle<T, 2>
make_triangle(
const point2d<T>& point1,
4904 const point2d<T>& point2,
4905 const point2d<T>& point3);
4906 template <
typename T>
4907 inline triangle<T, 3>
make_triangle(
const point3d<T>& point1,
4908 const point3d<T>& point2,
4909 const point3d<T>& point3);
4911 template <
typename T>
4912 inline quadix<T, 2>
make_quadix(
const T& x1,
const T& y1,
const T& x2,
4913 const T& y2,
const T& x3,
const T& y3,
4914 const T& x4,
const T& y4);
4916 template <
typename T>
4917 inline quadix<T, 3>
make_quadix(
const T& x1,
const T& y1,
const T& z1,
4918 const T& x2,
const T& y2,
const T& z2,
4919 const T& x3,
const T& y3,
const T& z3,
4920 const T& x4,
const T& y4,
const T& z4);
4922 template <
typename T>
4923 inline quadix<T, 2>
make_quadix(
const point2d<T>& point1,
4924 const point2d<T>& point2,
4925 const point2d<T>& point3,
4926 const point2d<T>& point4);
4927 template <
typename T>
4928 inline quadix<T, 3>
make_quadix(
const point3d<T>& point1,
4929 const point3d<T>& point2,
4930 const point3d<T>& point3,
4931 const point3d<T>& point4);
4933 template <
typename T>
4934 inline quadix<T, 2>
make_quadix(
const T& x1,
const T& y1,
const T& x2,
4936 template <
typename T>
4937 inline quadix<T, 2>
make_quadix(
const rectangle<T>& rectangle);
4939 template <
typename T>
4940 inline circle<T>
make_circle(
const T& x,
const T& y,
const T& radius);
4941 template <
typename T>
4942 inline circle<T>
make_circle(
const point2d<T>& point,
const T& radius);
4943 template <
typename T>
4944 inline circle<T>
make_circle(
const point2d<T>& point1,
4945 const point2d<T>& point2);
4946 template <
typename T>
4947 inline circle<T>
make_circle(
const point2d<T>& point1,
const point2d<T>& point2,
4948 const point2d<T>& point3);
4949 template <
typename T>
4950 inline circle<T>
make_circle(
const triangle<T, 2>& triangle);
4952 template <
typename T>
4953 inline sphere<T>
make_sphere(
const T& x,
const T& y,
const T& z,
4955 template <
typename T>
4956 inline sphere<T>
make_sphere(
const point3d<T>& point,
const T& radius);
4957 template <
typename T>
4958 inline sphere<T>
make_sphere(
const point3d<T>& point1,
4959 const point3d<T>& point2);
4961 template <
typename T>
4962 inline plane<T, 3>
make_plane(
const T& x1,
const T& y1,
const T& z1,
4963 const T& x2,
const T& y2,
const T& z2,
4964 const T& x3,
const T& y3,
const T& z3);
4966 template <
typename T>
4967 inline plane<T, 3>
make_plane(
const T& px,
const T& py,
const T& pz,
4968 const T& nx,
const T& ny,
const T& nz);
4970 template <
typename T>
4971 inline plane<T, 3>
make_plane(
const point3d<T>& point1,
4972 const point3d<T>& point2,
4973 const point3d<T>& point3);
4974 template <
typename T>
4975 inline plane<T, 3>
make_plane(
const point3d<T>& point,
4976 const vector3d<T>& normal);
4977 template <
typename T>
4978 inline plane<T, 3>
make_plane(
const triangle<T, 3>& triangle);
4980 template <
typename T, std::
size_t D,
typename InputIterator>
4981 inline polygon<T, D>
make_polygon(
const InputIterator begin,
4982 const InputIterator end);
4984 template <
typename T>
4985 inline polygon<T, 2>
make_polygon(
const std::vector<point2d<T> >& point_list);
4986 template <
typename T>
4987 inline polygon<T, 3>
make_polygon(
const std::vector<point3d<T> >& point_list);
4989 template <
typename T>
4990 inline polygon<T, 2>
make_polygon(
const triangle<T, 2>& triangle);
4991 template <
typename T>
4992 inline polygon<T, 2>
make_polygon(
const quadix<T, 2>& quadix);
4993 template <
typename T>
4994 inline polygon<T, 2>
make_polygon(
const rectangle<T>& rectangle);
4995 template <
typename T>
4996 inline polygon<T, 2>
make_polygon(
const circle<T>& circle,
4997 const unsigned int point_count = 360);
5001 #include "wykobi.inl"
const typedef Type & const_reference
Definition: wykobi.hpp:111
bool circle_in_circle(const circle< T > &circle1, const circle< T > &circle2)
bool quadix_within_box(const T &x1, const T &y1, const T &z1, const T &x2, const T &y2, const T &z2, const T &x3, const T &y3, const T &z3, const T &x4, const T &y4, const T &z4, const T &x5, const T &y5, const T &z5, const T &x6, const T &y6, const T &z6)
triangle< T, 2 > create_antipedal_triangle(const point2d< T > &point, const triangle< T, 2 > &triangle)
T y1
Definition: wykobi.hpp:454
circle< T > make_circle(const T &x, const T &y, const T &radius)
void closest_point_on_ray_from_point(const T &ox, const T &oy, const T &dx, const T &dy, const T &px, const T &py, T &nx, T &ny)
Definition: wykobi.hpp:263
bool point_in_focus_area(const T &px, const T &py, const T &x1, const T &y1, const T &x2, const T &y2, const T &x3, const T &y3)
PointType & reference
Definition: wykobi.hpp:444
const_reference operator[](const std::size_t &index) const
Definition: wykobi.hpp:402
T minimum_distance_from_point_to_line(const T &px, const T &py, const T &x1, const T &y1, const T &x2, const T &y2)
point3d< T > degenerate_point3d()
const typedef PointType & const_reference
Definition: wykobi.hpp:295
T radius
Definition: wykobi.hpp:428
void project_point0(const T &px, const T &py, const T &distance, T &nx, T &ny)
const T & tan(const unsigned int angle) const
Definition: wykobi.hpp:771
Definition: wykobi.hpp:468
void generate_random_points(const T &x1, const T &y1, const T &x2, const T &y2, const std::size_t &point_count, OutputIterator out)
@ etEquilateral
Definition: wykobi.hpp:727
curve_point< T, 2 > make_curve_point(const T &x, const T &y, const T &t)
Definition: wykobi.hpp:674
line< T, 2 > triangle_symmedian(const triangle< T, 2 > &triangle, const std::size_t &symmedian)
~pointnd()
Definition: wykobi.hpp:200
const_reference operator()() const
Definition: wykobi.hpp:570
bool point_in_sphere(const T &px, const T &py, const T &pz, const T &cx, const T &cy, const T &cz, const T &radius)
T x
Definition: wykobi.hpp:435
vector3d< T > & operator=(const vectornd< T, 3 > &vec)
Definition: wykobi.hpp:605
int out_code(const point2d< T > &point, const rectangle< T > &rectangle)
@ eSphere
Definition: wykobi.hpp:65
T minimum_distance_from_point_to_triangle(const T &px, const T &py, const T &x1, const T &y1, const T &x2, const T &y2, const T &x3, const T &y3)
point2d< T > minkowski_difference(const point2d< T > &point1, const point2d< T > &point2)
const typedef PointType & const_reference
Definition: wykobi.hpp:389
triangle< T, 2 > create_outer_vecten_triangle(const triangle< T, 2 > &triangle)
const typedef PointType & const_reference
Definition: wykobi.hpp:319
@ eCircle
Definition: wykobi.hpp:64
sphere< T > degenerate_sphere()
vector2d< T > operator+(const vector2d< T > &v1, const vector2d< T > &v2)
bool box_to_box_intersect(const T &x1, const T &y1, const T &z1, const T &x2, const T &y2, const T &z2, const T &x3, const T &y3, const T &z3, const T &x4, const T &y4, const T &z4)
T lay_distance(const T &x1, const T &y1, const T &x2, const T &y2)
point3d< T > & operator=(const pointnd< T, 3 > &point)
Definition: wykobi.hpp:118
pointnd(const point3d< T > &point)
Definition: wykobi.hpp:196
reference operator[](const std::size_t &index)
Definition: wykobi.hpp:302
line< T, 2 > create_line_from_bisector(const T &x1, const T &y1, const T &x2, const T &y2, const T &x3, const T &y3)
@ ePoint2D
Definition: wykobi.hpp:50
~quadratic_bezier()
Definition: wykobi.hpp:474
const int CLIP_RIGHT
Definition: wykobi.hpp:753
const int CollinearOrientation
Definition: wykobi.hpp:740
Definition: wykobi.hpp:244
bool is_isosceles_triangle(const triangle< T, 2 > &triangle)
point2d< T > exmedian_point(const triangle< T, 2 > &triangle, const std::size_t &corner)
define_point_type< T, Dimension >::PointType PointType
Definition: wykobi.hpp:270
circle< T > update_circle(const circle< T > &circle, point2d< T > &point)
bool intersect(const T &x1, const T &y1, const T &x2, const T &y2, const T &x3, const T &y3, const T &x4, const T &y4)
rectangle< T > degenerate_rectangle()
std::size_t size() const
Definition: wykobi.hpp:571
triangle< T, 2 > create_pedal_triangle(const point2d< T > &point, const triangle< T, 2 > &triangle)
T chebyshev_distance(const T &x1, const T &y1, const T &x2, const T &y2)
T cartesian_angle(const T &x, const T &y)
T radius
Definition: wykobi.hpp:447
Definition: wykobi.hpp:426
bool triangle_within_box(const T &x1, const T &y1, const T &z1, const T &x2, const T &y2, const T &z2, const T &x3, const T &y3, const T &z3, const T &x4, const T &y4, const T &z4, const T &x5, const T &y5, const T &z5)
cubic_bezier< T, 2 > BezierType
Definition: wykobi.hpp:534
circle< T > circumcircle(const T &x1, const T &y1, const T &x2, const T &y2, const T &x3, const T &y3)
line< T, 3 > degenerate_line3d()
void fast_rotate(const trig_luts< T > &lut, const int rotation_angle, const T &x, const T &y, T &nx, T &ny)
PointType & reference
Definition: wykobi.hpp:296
circle< T > degenerate_circle()
const typedef PointType & const_reference
Definition: wykobi.hpp:710
bool segment_within_box(const T &x1, const T &y1, const T &z1, const T &x2, const T &y2, const T &z2, const T &x3, const T &y3, const T &z3, const T &x4, const T &y4, const T &z4)
int in_sphere(const T &x1, const T &y1, const T &z1, const T &x2, const T &y2, const T &z2, const T &x3, const T &y3, const T &z3, const T &x4, const T &y4, const T &z4, const T &px, const T &py, const T &pz)
vector2d< T > operator-(const vector2d< T > &v1, const vector2d< T > &v2)
const_reference front() const
Definition: wykobi.hpp:418
circle< T > invert_circle_across_circle(const circle< T > &circle1, const circle< T > &circle2)
T vector_norm(const vector2d< T > &v)
const T & sin(const unsigned int angle) const
Definition: wykobi.hpp:769
Definition: wykobi.hpp:597
T span_length(const rectangle< T > &rectangle)
bool point_in_triangle(const T &px, const T &py, const T &x1, const T &y1, const T &x2, const T &y2, const T &x3, const T &y3)
PointType & reference
Definition: wykobi.hpp:711
const_reference operator[](const std::size_t &index) const
Definition: wykobi.hpp:718
define_point_type< T, Dimension >::PointType PointType
Definition: wykobi.hpp:693
const static std::size_t PointCount
Definition: wykobi.hpp:337
vectornd(const T &v0, const T &v1)
Definition: wykobi.hpp:620
reference operator()()
Definition: wykobi.hpp:569
segment< T, 2 > create_segment_from_bisector(const T &x1, const T &y1, const T &x2, const T &y2, const T &x3, const T &y3)
polygon< T, 2 > remove_consecutive_collinear_points(const polygon< T, 2 > &polygon)
~cubic_bezier()
Definition: wykobi.hpp:499
point3d< T > closest_point_on_sphere_from_segment(const sphere< T > &sphere, const segment< T, 3 > &segment)
void nonsymmetric_mirror(const T &px, const T &py, const T &x1, const T &y1, const T &x2, const T &y2, const T &ratio, T &nx, T &ny)
point2d< T > antipodal_point(const point2d< T > &point, const circle< T > &circle)
const T & cos(const unsigned int angle) const
Definition: wykobi.hpp:770
Definition: wykobi.hpp:702
triangle< T, 2 > vertex_triangle(const std::size_t &index, const polygon< T, 2 > polygon)
vector2d< T > operator/(const vector2d< T > &v1, const T &scale)
triangle< T, 2 > create_morley_triangle(const triangle< T, 2 > &triangle)
bool not_equal(const T &val1, const T &val2, const T &epsilon)
void create_equilateral_quadix(const T &x1, const T &y1, const T &x2, const T &y2, T &x3, T &y3, T &x4, T &y4)
Definition: wykobi.hpp:383
T vertical_mirror(const T &angle)
const typedef type & const_reference
Definition: wykobi.hpp:77
geometric_type
Definition: wykobi.hpp:49
Definition: wykobi.hpp:655
void circle_outer_tangent_segments(const circle< T > &circle0, const circle< T > &circle1, std::vector< segment< T, 2 > > &segments)
~triangle()
Definition: wykobi.hpp:316
point2d< T > closest_point_on_bezier_from_point(const quadratic_bezier< T, 2 > &bezier, const point2d< T > &point, const std::size_t &steps=1000)
iterator end()
Definition: wykobi.hpp:416
define_vector_type< T, Dimension >::VectorType VectorType
Definition: wykobi.hpp:694
reference operator()(const std::size_t &index)
Definition: wykobi.hpp:90
@ eRay3D
Definition: wykobi.hpp:63
@ etUnknown
Definition: wykobi.hpp:732
vector3d(const T &_x=T(0.0), const T &_y=T(0.0), const T &_z=T(0.0))
Definition: wykobi.hpp:599
segment< T, 2 > degenerate_segment2d()
T signed_area(const T &x1, const T &y1, const T &x2, const T &y2, const T &px, const T &py)
bool rectangle_within_rectangle(const T &x1, const T &y1, const T &x2, const T &y2, const T &x3, const T &y3, const T &x4, const T &y4)
line< T, 2 > triangle_external_bisector(const triangle< T, 2 > &triangle, const std::size_t &corner, const std::size_t &opposing_corner)
std::size_t size() const
Definition: wykobi.hpp:488
Definition: wykobi.hpp:452
point2d< T > project_object(const point2d< T > &point, const T &angle, const T &distance)
float epsilon< float >()
Definition: wykobi.hpp:797
bool is_point_collinear(const T &x1, const T &y1, const T &x2, const T &y2, const T &px, const T &py, const bool robust=false)
const int CLIP_TOP
Definition: wykobi.hpp:751
point2d< T > generate_point_on_segment(const segment< T, 2 > &segment, const T &t)
void centroid(const T &x1, const T &y1, const T &x2, const T &y2, T &x, T &y)
~rectangle()
Definition: wykobi.hpp:340
T radius
Definition: wykobi.hpp:435
bool point_on_circle(const T &px, const T &py, const T &cx, const T &cy, const T &radius)
reference operator[](const std::size_t &index)
Definition: wykobi.hpp:401
Definition: wykobi.hpp:287
eTriangleType
Definition: wykobi.hpp:726
Definition: wykobi.hpp:335
T dot_product(const vector2d< T > &v1, const vector2d< T > &v2)
const_reference operator[](const std::size_t &index) const
Definition: wykobi.hpp:303
void calculate_bezier_coefficients(const quadratic_bezier< T, 2 > &bezier, T &ax, T &bx, T &ay, T &by)
bool is_right_triangle(const wykobi::triangle< T, 2 > &triangle)
~polygon()
Definition: wykobi.hpp:386
~point2d()
Definition: wykobi.hpp:82
void project_point135(const T &px, const T &py, const T &distance, T &nx, T &ny)
T t
Definition: wykobi.hpp:573
@ ePoint3D
Definition: wykobi.hpp:51
@ eBox
Definition: wykobi.hpp:55
vector3d< T > degenerate_vector3d()
iterator begin()
Definition: wykobi.hpp:414
std::size_t size() const
Definition: wykobi.hpp:721
T signed_volume(const T &x1, const T &y1, const T &z1, const T &x2, const T &y2, const T &z2, const T &x3, const T &y3, const T &z3, const T &px, const T &py, const T &pz)
bool differing_orientation(const T &x1, const T &y1, const T &x2, const T &y2, const T &p1x, const T &p1y, const T &p2x, const T &p2y)
T cos(const T &value)
Definition: wykobi_math.hpp:143
bool is_skinny_triangle(const T &x1, const T &y1, const T &x2, const T &y2, const T &x3, const T &y3)
point2d< T > invert_point(const point2d< T > &point, const circle< T > &circle)
const typedef PointType & const_reference
Definition: wykobi.hpp:271
rectangle()
Definition: wykobi.hpp:339
Definition: wykobi.hpp:440
const_reference operator[](const std::size_t &index) const
Definition: wykobi.hpp:375
triangle< T, 2 > create_triangle(const point2d< T > &point1, const point2d< T > &point2, const T &angle1, const T &angle2)
const int CounterClockwise
Definition: wykobi.hpp:739
circle< T > brocard_circle(const triangle< T, 2 > &triangle)
bool segment_within_rectangle(const T &x1, const T &y1, const T &x2, const T &y2, const T &x3, const T &y3, const T &x4, const T &y4)
~ray()
Definition: wykobi.hpp:677
T tan(const T &value)
Definition: wykobi_math.hpp:148
bool intersect_vertical_horizontal(const segment< T, 2 > &segment1, const segment< T, 2 > &segment2)
triangle< T, 2 > create_anticomplementary_triangle(const triangle< T, 2 > &triangle)
pointnd< T, D > & operator=(const point3d< T > &point)
Definition: wykobi.hpp:220
triangle< T, 2 > create_feuerbach_triangle(const triangle< T, 2 > &triangle)
point2d< T > minkowski_sum(const point2d< T > &point1, const point2d< T > &point2)
std::size_t size() const
Definition: wykobi.hpp:412
bool triangle_within_rectangle(const T &x1, const T &y1, const T &x2, const T &y2, const T &x3, const T &y3, const T &x4, const T &y4, const T &x5, const T &y5)
const_reference operator[](const std::size_t &index) const
Definition: wykobi.hpp:327
void closest_point_on_line_from_point(const T &x1, const T &y1, const T &x2, const T &y2, const T &px, const T &py, T &nx, T &ny)
reference operator[](const std::size_t &index)
Definition: wykobi.hpp:484
triangle< T, 2 > create_excentral_triangle(const triangle< T, 2 > &triangle)
pointnd< T, Dimension > PointType
Definition: wykobi.hpp:246
std::size_t size() const
Definition: wykobi.hpp:330
bool operator<(const point2d< T > &point1, const point2d< T > &point2)
line< T, 2 > euler_line(const triangle< T, 2 > &triangle)
define_vector_type< T, Dimension >::VectorType VectorType
Definition: wykobi.hpp:680
T manhattan_distance(const T &x1, const T &y1, const T &x2, const T &y2)
T perpendicular_product(const vector2d< T > &v1, const vector2d< T > &v2)
bool point_in_three_point_circle(const T &px, const T &py, const T &x1, const T &y1, const T &x2, const T &y2, const T &x3, const T &y3)
bool sphere_within_box(const T &x, const T &y, const T &z, const T &radius, const T &x1, const T &y1, const T &z1, const T &x2, const T &y2, const T &z2)
T inverse_chebyshev_distance(const T &x1, const T &y1, const T &x2, const T &y2)
rectangle< T > make_rectangle(const T &x1, const T &y1, const T &x2, const T &y2)
plane< T, 3 > make_plane(const T &x1, const T &y1, const T &z1, const T &x2, const T &y2, const T &z2, const T &x3, const T &y3, const T &z3)
void segment_mid_point(const T &x1, const T &y1, const T &x2, const T &y2, T &midx, T &midy)
void closest_point_on_segment_from_point(const T &x1, const T &y1, const T &x2, const T &y2, const T &px, const T &py, T &nx, T &ny)
void project_point180(const T &px, const T &py, const T &distance, T &nx, T &ny)
pointnd(const T &v0, const T &v1, const T &v2)
Definition: wykobi.hpp:177
line< T, 2 > confined_triangle_median(const triangle< T, 2 > &triangle, const point2d< T > &point, const std::size_t &median)
Definition: wykobi.hpp:555
const typedef PointType & const_reference
Definition: wykobi.hpp:562
triangle< T, 2 > create_cevian_triangle(const triangle< T, 2 > &triangle, const point2d< T > &point)
@ eTriangle3D
Definition: wykobi.hpp:59
T robust_cartesian_angle(const T &x, const T &y)
PointType & reference
Definition: wykobi.hpp:563
unsigned int quadrant(const T &angle)
point2d< T > translate(const T &dx, const T &dy, const point2d< T > &point)
segment< T, 2 > opposing_edge(const triangle< T, 2 > &triangle, const std::size_t &corner)
point2d< T > PointType
Definition: wykobi.hpp:252
T generate_random_value(const T &range)
const int LeftHandSide
Definition: wykobi.hpp:737
int in_circle(const T &x1, const T &y1, const T &x2, const T &y2, const T &x3, const T &y3, const T &px, const T &py)
T x1
Definition: wykobi.hpp:454
triangle< T, 2 > create_extouch_triangle(const triangle< T, 2 > &triangle)
point2d< T > excenter(const triangle< T, 2 > &triangle, const std::size_t &corner)
T y
Definition: wykobi.hpp:104
circle< T > inscribed_circle(const T &x1, const T &y1, const T &x2, const T &y2, const T &x3, const T &y3)
point3d< T > PointType
Definition: wykobi.hpp:258
bool point_in_quadix(const T &px, const T &py, const T &x1, const T &y1, const T &x2, const T &y2, const T &x3, const T &y3, const T &x4, const T &y4)
triangle< T, 2 > create_symmedial_triangle(const triangle< T, 2 > &triangle, const point2d< T > &point)
T lay_distance_segment_to_segment(const T &x1, const T &y1, const T &x2, const T &y2, const T &x3, const T &y3, const T &x4, const T &y4)
Definition: wykobi.hpp:688
void push_back(const PointType &value)
Definition: wykobi.hpp:405
triangle()
Definition: wykobi.hpp:315
PointType & reference
Definition: wykobi.hpp:478
void intersection_point_line_to_line(const T &x1, const T &y1, const T &z1, const T &x2, const T &y2, const T &z2, const T &x3, const T &y3, const T &z3, const T &x4, const T &y4, const T &z4, T &Ix, T &Iy, T &Iz, const T &fuzzy=T(0.0))
BezierType
Definition: wykobi.hpp:464
@ eLine3D
Definition: wykobi.hpp:57
double epsilon< double >()
Definition: wykobi.hpp:793
std::size_t size()
Definition: wykobi.hpp:282
Definition: wykobi.hpp:47
bool parallel(const T &x1, const T &y1, const T &x2, const T &y2, const T &x3, const T &y3, const T &x4, const T &y4, const T &epsilon=T(Epsilon))
T & reference
Definition: wykobi.hpp:169
const_reference operator[](const std::size_t &index) const
Definition: wykobi.hpp:279
const_iterator begin() const
Definition: wykobi.hpp:413
bool less_than_or_equal(const T &val1, const T &val2, const T &epsilon)
line< T, 2 > create_perpendicular_bisector(const T &x1, const T &y1, const T &x2, const T &y2)
ray()
Definition: wykobi.hpp:676
T py
Definition: wykobi.hpp:457
triangle< T, 2 > create_incentral_triangle(const triangle< T, 2 > &triangle)
void project_point270(const T &px, const T &py, const T &distance, T &nx, T &ny)
bool rectangle_to_rectangle_intersect(const T &x1, const T &y1, const T &x2, const T &y2, const T &x3, const T &y3, const T &x4, const T &y4)
const typedef PointType & const_reference
Definition: wykobi.hpp:343
ray< T, 2 > create_ray_from_bisector(const T &x1, const T &y1, const T &x2, const T &y2, const T &x3, const T &y3)
@ eQuadix3D
Definition: wykobi.hpp:61
void mirror(const T &px, const T &py, const T &x1, const T &y1, const T &x2, const T &y2, T &nx, T &ny)
point2d< T > generate_random_point(const T &dx, const T &dy)
PointType & reference
Definition: wykobi.hpp:272
T cy
Definition: wykobi.hpp:456
pointnd< T, D > & operator=(const pointnd< T, D > &point)
Definition: wykobi.hpp:206
const int Cospherical
Definition: wykobi.hpp:747
T perimeter(const point2d< T > &point1, const point2d< T > &point2, const point2d< T > &point3)
box()
Definition: wykobi.hpp:706
T y2
Definition: wykobi.hpp:455
bool robust_collinear(const T &x1, const T &y1, const T &x2, const T &y2, const T &x3, const T &y3, const T &epsilon=T(Epsilon))
bool point_on_polygon_edge(const T &px, const T &py, const polygon< T, 2 > &polygon)
void project_point(const T &srcx, const T &srcy, const T &destx, const T &desty, const T &dist, T &nx, T &ny)
bool quadix_within_rectangle(const T &x1, const T &y1, const T &x2, const T &y2, const T &x3, const T &y3, const T &x4, const T &y4, const T &x5, const T &y5, const T &x6, const T &y6)
void lengthen_segment(T &x1, T &y1, T &x2, T &y2, const T &amount)
const static std::size_t PointCount
Definition: wykobi.hpp:704
point2d< T > closest_point_on_circle_from_circle(const circle< T > &circle1, const circle< T > &circle2)
T lay_distance_from_point_to_sphere_center(const point3d< T > &point, const sphere< T > &sphere)
curve_point()
Definition: wykobi.hpp:557
point2d(const pointnd< T, 2 > &point)
Definition: wykobi.hpp:81
triangle< T, 2 > create_isosceles_triangle(const point2d< T > &point1, const point2d< T > &point2, const T &angle)
point2d< T > symmedian_point(const triangle< T, 2 > &triangle)
T constant
Definition: wykobi.hpp:696
ray< T, 2 > make_ray(const T &ox, const T &oy, const T &dir_x, const T &dir_y)
triangle< T, 2 > make_triangle(const T &x1, const T &y1, const T &x2, const T &y2, const T &x3, const T &y3)
point2d< T > rectangle_corner(const rectangle< T > &rectangle, const std::size_t &corner_index)
bool clip(const T &x1, const T &y1, const T &x2, const T &y2, const T &x3, const T &y3, const T &x4, const T &y4, T &cx1, T &cy1, T &cx2, T &cy2)
vector2d< T > normalize(const vector2d< T > &v)
@ eRay2D
Definition: wykobi.hpp:62
T x
Definition: wykobi.hpp:428
box< T, 3 > update_box(const box< T, 3 > &box, point3d< T > &point)
const static std::size_t PointCount
Definition: wykobi.hpp:265
line< T, 2 > create_parallel_line_on_point(const line< T, 2 > &line, const point2d< T > &point)
define_point_type< T, 2 >::PointType PointType
Definition: wykobi.hpp:342
@ eSegment3D
Definition: wykobi.hpp:53
Type & reference
Definition: wykobi.hpp:112
point2d< T > degenerate_point2d()
@ eCubicBezier
Definition: wykobi.hpp:464
plane()
Definition: wykobi.hpp:690
line< Float, 3 > line3d
Definition: wykobi.hpp:786
bool greater_than_or_equal(const T &val1, const T &val2, const T &epsilon)
const_reference operator()(const std::size_t &index) const
Definition: wykobi.hpp:126
define_point_type< T, Dimension >::PointType PointType
Definition: wykobi.hpp:501
bool point_in_box(const T &px, const T &py, const T &pz, const T &x1, const T &y1, const T &z1, const T &x2, const T &y2, const T &z2)
bool vertex_is_ear(const std::size_t &index, const polygon< T, 2 > &polygon)
T lay_distance_from_point_to_circle_center(const point2d< T > &point, const circle< T > &circle)
cubic_bezier< T, 3 > BezierType
Definition: wykobi.hpp:540
define_point_type< T, Dimension >::PointType PointType
Definition: wykobi.hpp:679
define_point_type< T, Dimension >::PointType PointType
Definition: wykobi.hpp:318
Definition: wykobi.hpp:74
reference operator[](const std::size_t &index)
Definition: wykobi.hpp:234
bool is_degenerate(const T &x1, const T &y1, const T &x2, const T &y2)
const_reference operator[](const std::size_t &index) const
Definition: wykobi.hpp:235
int orientation
Definition: wykobi.hpp:460
trig_luts()
Definition: wykobi.hpp:761
@ eLine2D
Definition: wykobi.hpp:56
const_reference operator()(const std::size_t &index) const
Definition: wykobi.hpp:230
pointnd(const T &v0, const T &v1)
Definition: wykobi.hpp:173
void shorten_segment(T &x1, T &y1, T &x2, T &y2, const T &amount)
~point3d()
Definition: wykobi.hpp:116
bool circle_within_rectangle(const T &x, const T &y, const T &radius, const T &x1, const T &y1, const T &x2, const T &y2)
PointType & reference
Definition: wykobi.hpp:548
const_reference back() const
Definition: wykobi.hpp:420
void circumcenter(const T &x1, const T &y1, const T &x2, const T &y2, const T &x3, const T &y3, T &px, T &py)
@ eSegment2D
Definition: wykobi.hpp:52
@ eUnknown
Definition: wykobi.hpp:724
bool point_on_ray(const T &px, const T &py, const T &ox, const T &oy, const T &dx, const T &dy)
bool perpendicular(const T &x1, const T &y1, const T &x2, const T &y2, const T &x3, const T &y3, const T &x4, const T &y4, const T &epsilon=T(Epsilon))
reference operator[](const std::size_t &index)
Definition: wykobi.hpp:350
int orientation(const T &x1, const T &y1, const T &x2, const T &y2, const T &px, const T &py)
vectornd()
Definition: wykobi.hpp:616
@ etIsosceles
Definition: wykobi.hpp:728
bool is_equilateral_triangle(const triangle< T, 2 > &triangle)
pointnd(const T &v0)
Definition: wykobi.hpp:172
~segment()
Definition: wykobi.hpp:268
point2d< T > orthocenter(const triangle< T, 2 > &triangle)
bool polygon_within_rectangle(const polygon< T, 2 > &polygon, const rectangle< T > &rectangle)
int polygon_orientation(const polygon< T, 2 > &polygon)
VectorType normal
Definition: wykobi.hpp:697
const static BezierType Type
Definition: wykobi.hpp:496
T y
Definition: wykobi.hpp:428
define_point_type< T, Dimension >::PointType PointType
Definition: wykobi.hpp:476
std::vector< PointType >::iterator iterator
Definition: wykobi.hpp:396
vectornd< T, Dimension > VectorType
Definition: wykobi.hpp:657
PointType value[Type]
Definition: wykobi.hpp:550
pointnd(const T &v0, const T &v1, const T &v2, const T &v3)
Definition: wykobi.hpp:182
PointType & reference
Definition: wykobi.hpp:390
reference operator[](const std::size_t &index)
Definition: wykobi.hpp:717
const static std::size_t PointCount
Definition: wykobi.hpp:560
line< T, 2 > triangle_bisector(const triangle< T, 2 > &triangle, const std::size_t &bisector)
bool point_on_bezier(const point2d< T > &point, const quadratic_bezier< T, 2 > &bezier, const std::size_t &steps=1000, const T &fuzzy=T(Epsilon))
void reserve(const std::size_t amount)
Definition: wykobi.hpp:406
reference back()
Definition: wykobi.hpp:419
segment< Float, 3 > segment3d
Definition: wykobi.hpp:785
reference operator[](const std::size_t &index)
Definition: wykobi.hpp:130
point2d< T > cyclocevian_conjugate(const point2d< T > &point, const triangle< T, 2 > &triangle)
point2d< T > closest_point_on_polygon_from_point(const polygon< T, 2 > &polygon, const point2d< T > &point)
vector3d< T > VectorType
Definition: wykobi.hpp:669
vectornd(const T &v0, const T &v1, const T &v2, const T &v3)
Definition: wykobi.hpp:631
T vertex_angle(const T &x1, const T &y1, const T &x2, const T &y2, const T &x3, const T &y3)
void circle_internal_tangent_segments(const circle< T > &circle0, const circle< T > &circle1, std::vector< segment< T, 2 > > &segments)
T normalize_angle(const T &angle)
bool operator>(const point2d< T > &point1, const point2d< T > &point2)
vectornd(const T &v0)
Definition: wykobi.hpp:618
triangle< T, 2 > degenerate_triangle2d()
T bezier_curve_length(const quadratic_bezier< T, 2 > &bezier, const std::size_t &point_count)
Definition: wykobi.hpp:582
void closest_point_on_quadix_from_point(const T &x1, const T &y1, const T &x2, const T &y2, const T &x3, const T &y3, const T &x4, const T &y4, const T &px, const T &py, T &nx, T &ny)
line< T, 2 > make_line(const T &x1, const T &y1, const T &x2, const T &y2)
const_iterator end() const
Definition: wykobi.hpp:415
reference front()
Definition: wykobi.hpp:417
PointType center
Definition: wykobi.hpp:446
@ etRight
Definition: wykobi.hpp:729
void closest_point_on_box_from_point(const T &x1, const T &y1, const T &z1, const T &x2, const T &y2, const T &z2, const T &px, const T &py, const T &pz, T &nx, T &ny, T &nz)
void project_point45(const T &px, const T &py, const T &distance, T &nx, T &ny)
void clear()
Definition: wykobi.hpp:408
void generate_random_object(const T &x1, const T &y1, const T &x2, const T &y2, segment< T, 2 > &segment)
bool point_in_polygon(const T &px, const T &py, const polygon< T, 2 > &polygon)
void project_point90(const T &px, const T &py, const T &distance, T &nx, T &ny)
void project_point_t(const T &srcx, const T &srcy, const T &destx, const T &desty, const T &t, T &nx, T &ny)
T px
Definition: wykobi.hpp:457
void intersection_point(const T &x1, const T &y1, const T &x2, const T &y2, const T &x3, const T &y3, const T &x4, const T &y4, T &ix, T &iy)
const typedef PointType & const_reference
Definition: wykobi.hpp:502
quadratic_bezier()
Definition: wykobi.hpp:473
T minimum_distance_from_point_to_segment(const T &px, const T &py, const T &x1, const T &y1, const T &x2, const T &y2)
bool intersect_vertical_vertical(const segment< T, 2 > &segment1, const segment< T, 2 > &segment2)
@ eOutside
Definition: wykobi.hpp:724
const int RightHandSide
Definition: wykobi.hpp:736
define_point_type< T, Dimension >::PointType PointType
Definition: wykobi.hpp:294
point3d< T > closest_point_on_sphere_from_point(const sphere< T > &sphere, const point3d< T > &point)
T type
Definition: wykobi.hpp:76
line< T, 2 > perspectrix(const triangle< T, 2 > &triangle1, const triangle< T, 2 > &triangle2)
T minimum_distance_from_point_to_rectangle(const T &px, const T &py, const T &x1, const T &y1, const T &x2, const T &y2)
~quadix()
Definition: wykobi.hpp:364
vector2d< T > & operator=(const vectornd< T, 2 > &vec)
Definition: wykobi.hpp:589
void circle_internal_tangent_lines(const circle< T > &circle0, const circle< T > &circle1, std::vector< line< T, 2 > > &lines)
@ etObtuse
Definition: wykobi.hpp:731
bool intersect_horizontal_horizontal(const segment< T, 2 > &segment1, const segment< T, 2 > &segment2)
std::size_t size() const
Definition: wykobi.hpp:354
int robust_orientation(const T &x1, const T &y1, const T &x2, const T &y2, const T &px, const T &py)
void closest_point_on_rectangle_from_point(const T &x1, const T &y1, const T &x2, const T &y2, const T &px, const T &py, T &nx, T &ny)
void rotate(const T &rotation_angle, const T &x, const T &y, T &nx, T &ny)
point3d(const pointnd< T, 3 > &point)
Definition: wykobi.hpp:115
const int BelowOrientation
Definition: wykobi.hpp:742
void circle_tangent_points(const circle< T > &circle, const point2d< T > &point, point2d< T > &point1, point2d< T > &point2)
vectornd(const T &v0, const T &v1, const T &v2)
Definition: wykobi.hpp:625
std::size_t size() const
Definition: wykobi.hpp:513
T angle1
Definition: wykobi.hpp:458
bool collinear_vertex(const std::size_t &index, const polygon< T, 2 > &polygon)
@ eFully
Definition: wykobi.hpp:724
box< T, 3 > make_box(const T &x1, const T &y1, const T &z1, const T &x2, const T &y2, const T &z2)
~line()
Definition: wykobi.hpp:292
circle< T > excircle(const triangle< T, 2 > &triangle, const std::size_t &i)
polygon< T, D > make_polygon(const InputIterator begin, const InputIterator end)
sphere< T > circumsphere(const T &x1, const T &y1, const T &z1, const T &x2, const T &y2, const T &z2, const T &x3, const T &y3, const T &z3)
bool common_center(const circle< T > &circle1, const circle< T > &circle2)
segment< T, 2 > reverse_segment(const segment< T, 2 > &segment)
const static std::size_t PointCount
Definition: wykobi.hpp:470
Definition: wykobi.hpp:359
triangle< T, 2 > bezier_convex_hull(const quadratic_bezier< T, 2 > &bezier)
T horizontal_mirror(const T &angle)
quadratic_bezier< T, 3 > BezierType
Definition: wykobi.hpp:528
quadix< T, 3 > degenerate_quadix3d()
point2d< T > closest_point_on_aabbb_from_point(const rectangle< T > &rectangle, const point2d< T > &point)
line< T, 2 > triangle_median(const triangle< T, 2 > &triangle, const std::size_t &median)
@ eTriangle2D
Definition: wykobi.hpp:58
point2d< T > generate_point_on_ray(const ray< T, 2 > &ray, const T &t)
T oriented_vertex_angle(const T &x1, const T &y1, const T &x2, const T &y2, const T &x3, const T &y3, const int orient=Clockwise)
@ etScalene
Definition: wykobi.hpp:730
const int Cocircular
Definition: wykobi.hpp:746
Definition: wykobi.hpp:311
point2d< T > make_point(const T &x, const T &y)
void swap(point2d< T > &point1, point2d< T > &point2)
reference operator[](const std::size_t &index)
Definition: wykobi.hpp:374
define_point_type< T, Dimension >::PointType PointType
Definition: wykobi.hpp:442
T z
Definition: wykobi.hpp:435
ray< T, 2 > degenerate_ray2d()
point2d< T > & operator=(const pointnd< T, 2 > &point)
Definition: wykobi.hpp:84
void closest_point_on_triangle_from_point(const T &x1, const T &y1, const T &x2, const T &y2, const T &x3, const T &y3, const T &px, const T &py, T &nx, T &ny)
quadix()
Definition: wykobi.hpp:363
bool convex_vertex(const std::size_t &index, const polygon< T, 2 > &polygon, const int &polygon_orientation=LeftHandSide)
define_point_type< T, Dimension >::PointType PointType
Definition: wykobi.hpp:546
const int AboveOrientation
Definition: wykobi.hpp:741
point2d< T > feuerbach_point(const triangle< T, 2 > &triangle)
@ eQuadix2D
Definition: wykobi.hpp:60
define_point_type< T, Dimension >::PointType PointType
Definition: wykobi.hpp:366
T sin(const T &value)
Definition: wykobi_math.hpp:138
point2d< T > negative_infinite_point2d()
vector2d< T > make_vector(const T &x, const T &y)
sphere< T > invert_sphere_across_sphere(const sphere< T > &sphere1, const sphere< T > &sphere2)
T distance_from_point_to_sphere_center(const point3d< T > &point, const sphere< T > &sphere)
@ eQuadraticBezier
Definition: wykobi.hpp:464
triangle< T, 2 > right_shift(const triangle< T, 2 > &triangle, const std::size_t &shift)
const int CoplanarOrientation
Definition: wykobi.hpp:743
Definition: wykobi.hpp:517
point3d< T > box_corner(const box< T, 3 > &box, const std::size_t &corner_index)
circle< T > mandart_circle(const triangle< T, 2 > &triangle)
reference operator[](const std::size_t &index)
Definition: wykobi.hpp:509
const_reference operator()(const std::size_t &index) const
Definition: wykobi.hpp:93
T x2
Definition: wykobi.hpp:455
segment< T, 2 > project_onto_axis(const point2d< T > &point, const line< T, 2 > &axis)
const typedef T & const_reference
Definition: wykobi.hpp:168
const typedef PointType & const_reference
Definition: wykobi.hpp:477
Definition: wykobi.hpp:32
reference operator()(const std::size_t &index)
Definition: wykobi.hpp:125
ray< T, 3 > degenerate_ray3d()
PointType & reference
Definition: wykobi.hpp:503
~box()
Definition: wykobi.hpp:707
point2d< T > closest_point_on_circle_from_segment(const circle< T > &circle, const segment< T, 2 > &segment)
T x
Definition: wykobi.hpp:104
std::size_t size() const
Definition: wykobi.hpp:378
line< T, 2 > tangent_line(const circle< T > &circle, const point2d< T > &point)
Definition: wykobi.hpp:493
triangle< T, 2 > create_medial_triangle(const triangle< T, 2 > &triangle)
point3d< T > closest_point_on_sphere_from_sphere(const sphere< T > &sphere1, const sphere< T > &sphere2)
T operator*(const vector2d< T > &v1, const vector2d< T > &v2)
point2d< T > closest_point_on_circle_from_point(const circle< T > &circle, const point2d< T > &point)
sphere< T > inscribed_sphere(const T &x1, const T &y1, const T &z1, const T &x2, const T &y2, const T &z2, const T &x3, const T &y3, const T &z3)
T angle2
Definition: wykobi.hpp:459
triangle< T, 2 > create_circumcevian_triangle(const triangle< T, 2 > &triangle, const point2d< T > &point)
rectangle< T > aabb(const segment< T, 2 > &segment)
T z
Definition: wykobi.hpp:135
bool cocircular(const T &x1, const T &y1, const T &x2, const T &y2, const T &x3, const T &y3, const T &x4, const T &y4, const T &epsilon=T(Epsilon))
bool point_in_convex_polygon(const T &px, const T &py, const polygon< T, 2 > &polygon)
triangle< Float, 3 > triangle3d
Definition: wykobi.hpp:787
segment< T, 3 > degenerate_segment3d()
void order_sensitive_closest_point_on_segment_from_point(const T &x1, const T &y1, const T &x2, const T &y2, const T &px, const T &py, T &nx, T &ny)
Definition: wykobi.hpp:757
triangle< T, 2 > create_inner_napoleon_triangle(const triangle< T, 2 > &triangle)
void clear() const
Definition: wykobi.hpp:407
point3d()
Definition: wykobi.hpp:114
point2d< T > isogonal_conjugate(const point2d< T > &point, const triangle< T, 2 > &triangle)
bool simplex_to_bezier_intersect(const Simplex &simplex, const Bezier &bezier, const std::size_t &steps)
polygon(const std::size_t initial_size=0)
Definition: wykobi.hpp:385
Definition: wykobi.hpp:579
PointType & reference
Definition: wykobi.hpp:320
triangle< T, 3 > degenerate_triangle3d()
std::size_t size()
Definition: wykobi.hpp:306
bool point_of_reflection(const T &sx1, const T &sy1, const T &sx2, const T &sy2, const T &p1x, const T &p1y, const T &p2x, const T &p2y, T &rpx, T &rpy)
void order_sensitive_closest_point_on_line_from_point(const T &x1, const T &y1, const T &x2, const T &y2, const T &px, const T &py, T &nx, T &ny)
segment< Float, 2 > segment2d
Definition: wykobi.hpp:780
pointnd()
Definition: wykobi.hpp:171
const int PointInside
Definition: wykobi.hpp:744
PointType value_type
Definition: wykobi.hpp:398
void incenter(const T &x1, const T &y1, const T &x2, const T &y2, const T &x3, const T &y3, T &px, T &py)
bool polygon_within_box(const polygon< T, 3 > &polygon, const box< T, 3 > &box)
@ ePartially
Definition: wykobi.hpp:724
line< T, 2 > degenerate_line2d()
point2d< T > positive_infinite_point2d()
quadix< Float, 3 > quadix3d
Definition: wykobi.hpp:788
T distance_from_point_to_circle_center(const point2d< T > &point, const circle< T > &circle)
point2d()
Definition: wykobi.hpp:80
line< T, 2 > create_perpendicular_line_at_end_point(const line< T, 2 > &line)
const_reference operator[](const std::size_t &index) const
Definition: wykobi.hpp:100
point3d< T > negative_infinite_point3d()
vectornd(const vector2d< T > &vec)
Definition: wykobi.hpp:642
point2d< T > scale(const T &dx, const T &dy, const point2d< T > &point)
triangle< T, 2 > create_inner_vecten_triangle(const triangle< T, 2 > &triangle)
const int CLIP_BOTTOM
Definition: wykobi.hpp:750
bool is_equal(const T &val1, const T &val2, const T &epsilon)
const int Clockwise
Definition: wykobi.hpp:738
void torricelli_point(const T &x1, const T &y1, const T &x2, const T &y2, const T &x3, const T &y3, T &px, T &py)
void circle_outer_tangent_lines(const circle< T > &circle0, const circle< T > &circle1, std::vector< line< T, 2 > > &lines)
void reverse()
Definition: wykobi.hpp:421
triangle< T, 2 > create_intouch_triangle(const triangle< T, 2 > &triangle)
T cx
Definition: wykobi.hpp:456
circle< T > nine_point_circle(const T &x1, const T &y1, const T &x2, const T &y2, const T &x3, const T &y3)
segment()
Definition: wykobi.hpp:267
eInclusion
Definition: wykobi.hpp:724
pointnd(const point2d< T > &point)
Definition: wykobi.hpp:192
quadratic_bezier< T, 2 > BezierType
Definition: wykobi.hpp:522
VectorType direction
Definition: wykobi.hpp:683
reference operator[](const std::size_t &index)
Definition: wykobi.hpp:326
quadix< T, 2 > make_quadix(const T &x1, const T &y1, const T &x2, const T &y2, const T &x3, const T &y3, const T &x4, const T &y4)
const static unsigned int TableSize
Definition: wykobi.hpp:759
triangle< T, 2 > create_orthic_triangle(const triangle< T, 2 > &triangle)
define_point_type< T, Dimension >::PointType PointType
Definition: wykobi.hpp:561
void generate_bezier(const quadratic_bezier< T, 2 > &bezier, OutputIterator out, const std::size_t &point_count=1000)
void erase(const std::size_t index)
Definition: wykobi.hpp:409
line()
Definition: wykobi.hpp:291
point3d< T > closest_point_on_plane_from_point(const plane< T, 3 > &plane, const point3d< T > &point)
bool point_on_triangle(const T &px, const T &py, const T &x1, const T &y1, const T &x2, const T &y2, const T &x3, const T &y3)
bool robust_parallel(const T &x1, const T &y1, const T &x2, const T &y2, const T &x3, const T &y3, const T &x4, const T &y4, const T &epsilon=T(Epsilon))
segment< T, 2 > edge(const triangle< T, 2 > &triangle, const std::size_t &edge_index)
sphere< T > make_sphere(const T &x, const T &y, const T &z, const T &radius)
T v[D]
Definition: wykobi.hpp:240
bool robust_perpendicular(const T &x1, const T &y1, const T &x2, const T &y2, const T &x3, const T &y3, const T &x4, const T &y4, const T &epsilon=T(Epsilon))
bool trilateration(const T &c0x, const T &c0y, const T &c0r, const T &c1x, const T &c1y, const T &c1r, const T &c2x, const T &c2y, const T &c2r, T &px, T &py)
void project_point225(const T &px, const T &py, const T &distance, T &nx, T &ny)
T y
Definition: wykobi.hpp:135
Definition: wykobi.hpp:545
const static BezierType Type
Definition: wykobi.hpp:471
bool point_in_circle(const T &px, const T &py, const T &cx, const T &cy, const T &radius)
quadix< T, 2 > degenerate_quadix2d()
bool point_in_rectangle(const T &px, const T &py, const T &x1, const T &y1, const T &x2, const T &y2)
bool coplanar(const ray< T, 3 > &ray1, const ray< T, 3 > &ray2)
const_reference operator[](const std::size_t &index) const
Definition: wykobi.hpp:510
cubic_bezier()
Definition: wykobi.hpp:498
~curve_point()
Definition: wykobi.hpp:558
segment< T, 2 > create_parallel_segment_on_point(const line< T, 2 > &line, const point2d< T > &point)
reference operator[](const std::size_t &index)
Definition: wykobi.hpp:278
vector2d< T > VectorType
Definition: wykobi.hpp:663
Definition: wykobi.hpp:433
T Type
Definition: wykobi.hpp:110
Definition: wykobi.hpp:71
const typedef PointType & const_reference
Definition: wykobi.hpp:443
segment< T, 2 > center_at_location(const segment< T, 2 > &segment, const T &x, const T &y)
vectornd(const vectornd< T, D > &vec)
Definition: wykobi.hpp:638
const int CLIP_LEFT
Definition: wykobi.hpp:752
vector2d(const T &_x=T(0.0), const T &_y=T(0.0))
Definition: wykobi.hpp:584
Definition: wykobi.hpp:108
~plane()
Definition: wykobi.hpp:691
triangle< T, 2 > create_anticevian_triangle(const triangle< T, 2 > &triangle, const point2d< T > &point)
const typedef PointType & const_reference
Definition: wykobi.hpp:367
void clear()
Definition: wykobi.hpp:202
bool point_on_rectangle(const T &px, const T &py, const T &x1, const T &y1, const T &x2, const T &y2)
define_point_type< T, Dimension >::PointType PointType
Definition: wykobi.hpp:709
point3d< T > positive_infinite_point3d()
pointnd< T, D > & operator=(const point2d< T > &point)
Definition: wykobi.hpp:212
T distance_line_to_line(const T &x1, const T &y1, const T &x2, const T &y2, const T &x3, const T &y3, const T &x4, const T &y4)
reference operator()(const std::size_t &index)
Definition: wykobi.hpp:229
triangle< T, 2 > create_contact_triangle(const triangle< T, 2 > &triangle)
bool point_on_segment(const point2d< T > &point, const segment< T, 2 > &segment)
bool point_on_quadix(const T &px, const T &py, const T &x1, const T &y1, const T &x2, const T &y2, const T &x3, const T &y3, const T &x4, const T &y4)
T y
Definition: wykobi.hpp:435
bool operator==(const point2d< T > &point1, const point2d< T > &point2)
const_reference operator[](const std::size_t &index) const
Definition: wykobi.hpp:485
sphere< T > update_sphere(const sphere< T > &sphere, point3d< T > &point)
reference operator[](const std::size_t &index)
Definition: wykobi.hpp:97
define_point_type< T, Dimension >::PointType PointType
Definition: wykobi.hpp:388
vectornd(const vector3d< T > &vec)
Definition: wykobi.hpp:647
vector2d< T > degenerate_vector2d()
bool simple_intersect(const T &x1, const T &y1, const T &x2, const T &y2, const T &x3, const T &y3, const T &x4, const T &y4)
void project_point315(const T &px, const T &py, const T &distance, T &nx, T &ny)
triangle< Float, 2 > triangle2d
Definition: wykobi.hpp:782
T triple_product(const vector3d< T > &v1, const vector3d< T > &v2, const vector3d< T > &v3)
const_reference operator[](const std::size_t &index) const
Definition: wykobi.hpp:131
T distance(const T &x1, const T &y1, const T &x2, const T &y2)
PointType origin
Definition: wykobi.hpp:682
T lay_distance_line_to_line(const T &x1, const T &y1, const T &x2, const T &y2, const T &x3, const T &y3, const T &x4, const T &y4)
T distance_segment_to_segment(const T &x1, const T &y1, const T &x2, const T &y2, const T &x3, const T &y3, const T &x4, const T &y4)
segment< T, 2 > make_segment(const T &x1, const T &y1, const T &x2, const T &y2)
T x
Definition: wykobi.hpp:135
bool is_convex_polygon(const polygon< T, 2 > &polygon)
bool are_perspective_triangles(const triangle< T, 2 > &triangle1, const triangle< T, 2 > &triangle2)
bool box_within_box(const T &x1, const T &y1, const T &z1, const T &x2, const T &y2, const T &z2, const T &x3, const T &y3, const T &z3, const T &x4, const T &y4, const T &z4)
type & reference
Definition: wykobi.hpp:78
triangle< T, 2 > create_first_brocard_triangle(const triangle< T, 2 > &triangle)
std::vector< PointType >::const_iterator const_iterator
Definition: wykobi.hpp:397
void create_right_triangle(const wykobi::point2d< T > &p1, const wykobi::point2d< T > &p2, wykobi::point2d< T > &c1, wykobi::point2d< T > &c2)
bool collinear(const T &x1, const T &y1, const T &x2, const T &y2, const T &x3, const T &y3, const T &epsilon=T(Epsilon))
bool line_to_line_intersect(const T &x1, const T &y1, const T &x2, const T &y2, const T &x3, const T &y3, const T &x4, const T &y4)
PointType & reference
Definition: wykobi.hpp:344
triangle< T, 2 > create_circummedial_triangle(const triangle< T, 2 > &triangle)
quadix< Float, 2 > quadix2d
Definition: wykobi.hpp:783
T area(const point2d< T > &point1, const point2d< T > &point2, const point2d< T > &point3)
triangle< T, 2 > create_outer_napoleon_triangle(const triangle< T, 2 > &triangle)
const_reference operator[](const std::size_t &index) const
Definition: wykobi.hpp:351
@ eRectangle
Definition: wykobi.hpp:54
void create_equilateral_triangle(const T &x1, const T &y1, const T &x2, const T &y2, T &x3, T &y3)
bool point_in_polygon_winding_number(const T &px, const T &py, const polygon< T, 2 > &polygon)
bool robust_coplanar(const point3d< T > point1, const point3d< T > point2, const point3d< T > point3, const point3d< T > point4, const T &epsilon=T(Epsilon))
const static std::size_t PointCount
Definition: wykobi.hpp:289
const static std::size_t PointCount
Definition: wykobi.hpp:361
PointType & reference
Definition: wykobi.hpp:368
const static std::size_t PointCount
Definition: wykobi.hpp:495
bool is_tangent(const segment< T, 2 > &segment, const circle< T > &circle)
point2d< T > create_point_on_bezier(const point2d< T > &start_point, const T &ax, const T &bx, const T &ay, const T &by, const T &t)
bool convex_quadix(const quadix< T, 2 > &quadix)
pointnd(const pointnd< T, D > &point)
Definition: wykobi.hpp:188
rectangle< T > update_rectangle(const rectangle< T > &rectangle, point2d< T > &point)
const typedef PointType & const_reference
Definition: wykobi.hpp:547
const static std::size_t PointCount
Definition: wykobi.hpp:313
const int PointOutside
Definition: wykobi.hpp:745
line< Float, 2 > line2d
Definition: wykobi.hpp:781