00001
00021 #ifndef KIG_MISC_CONIC_COMMON_H
00022 #define KIG_MISC_CONIC_COMMON_H
00023
00024 #include "coordinate.h"
00025 #include <vector>
00026 #include "kignumerics.h"
00027
00028 class ConicPolarData;
00029 class Transformation;
00030 class LineData;
00031
00037 class ConicCartesianData
00038 {
00039 public:
00040 double coeffs[6];
00041 ConicCartesianData();
00047 explicit ConicCartesianData( const ConicPolarData& d );
00053 ConicCartesianData( double a, double b, double c,
00054 double d, double e, double f )
00055 {
00056 coeffs[0] = a;
00057 coeffs[1] = b;
00058 coeffs[2] = c;
00059 coeffs[3] = d;
00060 coeffs[4] = e;
00061 coeffs[5] = f;
00062 }
00063 ConicCartesianData( const double incoeffs[6] );
00064
00070 static ConicCartesianData invalidData();
00076 bool valid() const;
00077 };
00078
00085 class ConicPolarData
00086 {
00087 public:
00094 explicit ConicPolarData( const ConicCartesianData& data );
00095 explicit ConicPolarData();
00100 ConicPolarData( const Coordinate& focus1, double dimen,
00101 double ecostheta0, double esintheta0 );
00102
00106 Coordinate focus1;
00110 double pdimen;
00114 double ecostheta0;
00118 double esintheta0;
00119 };
00120
00121 bool operator==( const ConicPolarData& lhs, const ConicPolarData& rhs );
00122
00137 enum LinearConstraints {
00138 noconstraint, zerotilt, parabolaifzt, circleifzt,
00139 equilateral, ysymmetry, xsymmetry
00140 };
00141
00153 const ConicCartesianData calcConicThroughPoints (
00154 const std::vector<Coordinate>& points,
00155 const LinearConstraints c1 = noconstraint,
00156 const LinearConstraints c2 = noconstraint,
00157 const LinearConstraints c3 = noconstraint,
00158 const LinearConstraints c4 = noconstraint,
00159 const LinearConstraints c5 = noconstraint);
00160
00169 const ConicPolarData calcConicBFFP(
00170 const std::vector<Coordinate>& args,
00171 int type );
00172
00177 const ConicPolarData calcConicBDFP(
00178 const LineData& d, const Coordinate& f, const Coordinate& p );
00179
00184 const ConicCartesianData calcConicByAsymptotes(
00185 const LineData& line1,
00186 const LineData& line2,
00187 const Coordinate& p );
00188
00197 const LineData calcConicPolarLine (
00198 const ConicCartesianData& data,
00199 const Coordinate& cpole,
00200 bool& valid );
00201
00210 const Coordinate calcConicPolarPoint (
00211 const ConicCartesianData& data,
00212 const LineData& polar );
00213
00230 const Coordinate calcConicLineIntersect( const ConicCartesianData& c,
00231 const LineData& l,
00232 double knownparam,
00233 int which );
00234
00244 const LineData calcConicAsymptote(
00245 const ConicCartesianData data,
00246 int which, bool &valid );
00247
00261 const LineData calcConicRadical( const ConicCartesianData& cequation1,
00262 const ConicCartesianData& cequation2,
00263 int which, int zeroindex, bool& valid );
00264
00274 const ConicCartesianData calcConicTransformation (
00275 const ConicCartesianData& data,
00276 const Transformation& t, bool& valid );
00277
00278 #endif // KIG_MISC_CONIC_COMMON_H