00001
00002
00003
00004
00005
00006
00007
00008
00009 #include "AIntersection.h"
00010
00011 AIntersection::AIntersection(Implicit *f, Implicit *g, int cont)
00012 {
00013 m_f = f;
00014 m_g = g;
00015 m_cont = cont;
00016 m_r1 = .3200;
00017 m_r2 = .3200;
00018 }
00019
00020 double AIntersection::h(double f, double g)
00021 {
00022 if ((f <= m_r1) && (g <= m_r2))
00023 return -((((f - m_r1) * (f - m_r1)) / (m_r1 * m_r1)) +
00024 (((g - m_r2) * (g - m_r2)) / (m_r2 * m_r2)) - 1);
00025 else
00026 return RFunction::h(f,g);
00027 }
00028
00029 Intervald AIntersection::h(Intervald f, Intervald g)
00030 {
00031 if ((f <= m_r1) && (g <= m_r2))
00032 {
00033 Intervald r1(m_r1);
00034 Intervald r2(m_r2);
00035 return -(((f - r1).squared() / r1.squared()) +
00036 ((g - r2).squared() / r2.squared()) -
00037 Intervald(1.0));
00038 }
00039 else
00040 return RFunction::h(f,g);
00041 }
00042
00043 double AIntersection::hf(double f, double g)
00044 {
00045 if ((f <= m_r1) && (g <= m_r2))
00046 return -(((2.0 * f - 2.0 * m_r1) / (m_r1 * m_r1)));
00047 else
00048 return RFunction::hf(f,g);
00049 }
00050
00051 Intervald AIntersection::hf(Intervald f, Intervald g)
00052 {
00053 if ((f <= m_r1) && (g <= m_r2))
00054 {
00055 Intervald r1(m_r1);
00056 Intervald two(2.0);
00057 return -(((two * f) - (two * r1)) / r1.squared());
00058 }
00059 else
00060 return RFunction::hf(f,g);
00061 }
00062
00063 double AIntersection::hg(double f, double g)
00064 {
00065 if ((f <= m_r1) && (g <= m_r2))
00066 return -(((2.0 * g - 2.0 * m_r2) / (m_r2 * m_r2)));
00067 else
00068 return RFunction::hg(f,g);
00069 }
00070
00071 Intervald AIntersection::hg(Intervald f, Intervald g)
00072 {
00073 if ((f <= m_r1) && (g <= m_r2))
00074 {
00075 Intervald r2(m_r2);
00076 Intervald two(2.0);
00077 return -(((two * g) - (two * r2)) / r2.squared());
00078 }
00079 else
00080 return RFunction::hg(f,g);
00081 }
00082
00083 double AIntersection::hff(double f, double g)
00084 {
00085 if ((f <= m_r1) && (g <= m_r2))
00086 return -(2.0 / (m_r1 * m_r1));
00087 else
00088 return RFunction::hff(f,g);
00089 }
00090
00091 Intervald AIntersection::hff(Intervald f, Intervald g)
00092 {
00093 if ((f <= m_r1) && (g <= m_r2))
00094 {
00095 Intervald r1(m_r1);
00096 return -(Intervald(2.0) / r1.squared());
00097 }
00098 else
00099 return RFunction::hff(f,g);
00100 }
00101
00102 double AIntersection::hgg(double f, double g)
00103 {
00104 if ((f <= m_r1) && (g <= m_r2))
00105 return -(2.0 / (m_r2 * m_r2));
00106 else
00107 return RFunction::hgg(f,g);
00108 }
00109
00110 Intervald AIntersection::hgg(Intervald f, Intervald g)
00111 {
00112 if ((f <= m_r1) && (g <= m_r2))
00113 {
00114 Intervald r2(m_r2);
00115 return -(Intervald(2.0) / r2.squared());
00116 }
00117 else
00118 return RFunction::hgg(f,g);
00119 }
00120
00121 double AIntersection::hfg(double f, double g)
00122 {
00123 if ((f <= m_r1) && (g <= m_r2))
00124 return 0.0;
00125 else
00126 return RFunction::hfg(f,g);
00127 }
00128
00129 Intervald AIntersection::hfg(Intervald f, Intervald g)
00130 {
00131 if ((f <= m_r1) && (g <= m_r2))
00132 return Intervald(0.0);
00133 else
00134 return RFunction::hfg(f,g);
00135 }
00136