Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members | Related Pages

AIntersection.cpp

Go to the documentation of this file.
00001 /**
00002  * @file AIntersect.cpp
00003  * Surface Modeling Library
00004  * CS497
00005  *
00006  * @author William Nagel
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 

Generated on Mon Jun 28 14:58:12 2004 for Advanced Surface Library by doxygen 1.3.4