📄 cogprint.cxx
字号:
#include <math.h>
#include "cog.hxx"
#include "wzoutput.hxx"
// this file contains test functions with very short names, without cog-prefix
// the purpose is to make debugging faster.
void cogFlag1::print() const
{
wzOutput& pout = wzOutput::Default;
if(p1.invalid()){
pout("<> ")<<"invalid 1-flag";
p0.print();
return;
}
pout("<> ")<<"1-flag";
p1.print();
cogFloat dd=cogLine(po,p0).diameter();
pout("regions from <> to <> in direction [<>,<>,<>] (distance <>)\n")<<
(wzIndex)p0.region(),(wzIndex)po.region(),
(po[0]-p0[0])/dd,
(po[1]-p0[1])/dd,
(po[2]-p0[2])/dd,
dd;
if((po[0]-p1[0])*(p0[0]-p1[0]) +
(po[1]-p1[1])*(p0[1]-p1[1]) +
(po[2]-p1[2])*(p0[2]-p1[2]) >0){
pout(" p1 [<10>,<10>,<10>] not between\n p0 [<10>,<10>,<10>] and\n po [<10>,<10>,<10>]\n")
,p1[0],p1[1],p1[2]
,p0[0],p0[1],p0[2]
,po[0],po[1],po[2];
}
}
void cogFlag2::print() const
{
wzOutput& pout = wzOutput::Default;
if(p2.invalid()){
((cogFlag1*)this)->print();
return;
}
pout("<> ")<<"2-flag";
p2.print();
cogFloat dd=cogLine(p1,p2).diameter();
pout("face <> in direction [<>,<>,<>] (distance <>)\n")<<
(wzIndex)p1.face(),
(p1[0]-p2[0])/dd,
(p1[1]-p2[1])/dd,
(p1[2]-p2[2])/dd,
dd;
dd=cogLine(po,p0).diameter();
pout("regions from <> to <> in direction [<>,<>,<>] (distance <>)\n")<<
(wzIndex)p0.region(),(wzIndex)po.region(),
(po[0]-p0[0])/dd,
(po[1]-p0[1])/dd,
(po[2]-p0[2])/dd,
dd;
if((po[0]-p1[0])*(p0[0]-p1[0]) +
(po[1]-p1[1])*(p0[1]-p1[1]) +
(po[2]-p1[2])*(p0[2]-p1[2]) >0){
pout(" p1 [<10>,<10>,<10>] not between\n p0 [<10>,<10>,<10>] and\n po [<10>,<10>,<10>]\n")
,p1[0],p1[1],p1[2]
,p0[0],p0[1],p0[2]
,po[0],po[1],po[2];
}
}
void cogLine::print() const
{
wzOutput& pout = wzOutput::Default;
c0.print(); c1.print();
pout("diameter <>\n")<<diameter();
}
void cogTriangle::print() const
{
wzOutput& pout = wzOutput::Default;
c0.print(); c1.print(); c2.print();
pout("diameter <>\n")<<diameter();
}
void cogTetrahedron::print() const
{
wzOutput& pout = wzOutput::Default;
c0.print(); c1.print(); c2.print(); c3.print();
pout("volume <> diameter <>\n")<<volume(),diameter();
}
void cogSquare::print() const
{
c0.print(); c1.print(); c2.print(); c3.print();
}
void cogFlag3::print() const
{
wzOutput& pout = wzOutput::Default;
if(!p3.isVertex()){
((cogFlag2*)this)->print();
return;
}
pout("<> ")<<"3-flag";
p3.print();
pout("edge <> in direction [<>,<>,<>]\n")<<
(wzIndex)p2.edge(),
p2[0]-p3[0],
p2[1]-p3[1],
p2[2]-p3[2];
pout("face <> in direction [<>,<>,<>]\n")<<
(wzIndex)p1.face(),
p1[0]-p2[0],
p1[1]-p2[1],
p1[2]-p2[2];
pout("regions from <> to <> in direction [<>,<>,<>]\n")<<
(wzIndex)p0.region(),(wzIndex)po.region(),
po[0]-p0[0],
po[1]-p0[1],
po[2]-p0[2];
}
void s1(const cogLine& s)
{s.print();}
void s2(const cogTriangle& s)
{s.print();}
void s3(const cogTetrahedron& s)
{s.print();}
void ss(const cogSquare& s)
{s.print();}
void p1(const cogFlag1& f)
{f.print();}
void p2(const cogFlag2& f)
{f.print();}
void p3(const cogFlag3& f)
{f.print();}
void p(const wzPoint& x)
{x.print();}
void ton(const wzPoint& x,const wzPoint& y,const wzPoint& z)
{
wzOutput& pout = wzOutput::Default;
cogFloat l2 = y.scalar(z,z);
cogFloat v2 = y.vector2(x,z);
pout("relative distance <> (length <>)") << sqrt(v2)/l2, sqrt(l2);
}
cogFloat xon(const wzPoint& x,const wzPoint& y,const wzPoint& z)
{
cogFloat l2 = y.scalar(z,z);
cogFloat v2 = y.vector2(x,z);
return sqrt(v2)/l2;
}
void cogLinkPrintCommands()
{
if(0){
wzPoint x; cogFlag1 f1(x,x,x); cogFlag2 f2(x,x,x,x); cogFlag3 f3(x,x,x,x,x);
cogLine t1(x,x); cogTriangle t2(x,x,x); cogSquare ts(x,x,x,x);
cogTetrahedron t3(x,x,x,x);
p(x); p1(f1); p2(f2); p3(f3);
s1(t1); s2(t2); s3(t3); ss(ts);
ton(x,x,x); xon(x,x,x);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -