00001 #include <SyFi.h> 00002 00003 using namespace GiNaC; 00004 00005 int main() { 00006 00007 symbol x0("x0"), x1("x1"), y0("y0"), y1("y1"), z0("z0"); 00008 00009 ex p0 = lst(x0,y0,z0); 00010 ex p1 = lst(x1,y0,z0); 00011 ex p2 = lst(x0,y1,z0); 00012 00013 Triangle triangle(p0,p1,p2); 00014 00015 ex repr = triangle.repr(); 00016 cout <<"t.repr "<<repr<<endl; 00017 EQUAL_OR_DIE(repr, "{x==x0+r*(x1-x0),y==y0+(-y0+y1)*s,z==z0,{r,0,1},{s,0,1-r}}"); 00018 00019 ex f = x*y*z; 00020 ex intf = triangle.integrate(f); 00021 cout <<"intf "<<intf<<endl; 00022 EQUAL_OR_DIE(intf, "5/24*y0*x0*sqrt(-2*y0^2*x1*x0-2*y0*x0^2*y1 +y0^2*x1^2+x1^2*y1^2+4*y0*x1*x0*y1-2*x1*x0*y1^2+x0^2*y1^2-2*y0*x1^2*y1+y0^2*x0^2 )*z0+1/8*x0*sqrt(-2*y0^2*x1*x0-2*y0*x0^2*y1+y0^2*x1^2+x1^2*y1^2+4*y0*x1*x0*y1-2* x1*x0*y1^2+x0^2*y1^2-2*y0*x1^2*y1+y0^2*x0^2)*z0*y1+1/8*y0*x1*sqrt(-2*y0^2*x1*x0- 2*y0*x0^2*y1+y0^2*x1^2+x1^2*y1^2+4*y0*x1*x0*y1-2*x1*x0*y1^2+x0^2*y1^2-2*y0*x1^2* y1+y0^2*x0^2)*z0+1/24*x1*sqrt(-2*y0^2*x1*x0-2*y0*x0^2*y1+y0^2*x1^2+x1^2*y1^2+4*y 0*x1*x0*y1-2*x1*x0*y1^2+x0^2*y1^2-2*y0*x1^2*y1+y0^2*x0^2)*z0*y1"); 00023 00024 return 0; 00025 } 00026