private static decimal InCircleDecimal(Point pa, Point pb, Point pc, Point pd)
{
Statistic.InCircleCountDecimal++;
decimal adx, bdx, cdx, ady, bdy, cdy;
decimal bdxcdy, cdxbdy, cdxady, adxcdy, adxbdy, bdxady;
decimal alift, blift, clift;
adx = (decimal)pa.x - (decimal)pd.x;
bdx = (decimal)pb.x - (decimal)pd.x;
cdx = (decimal)pc.x - (decimal)pd.x;
ady = (decimal)pa.y - (decimal)pd.y;
bdy = (decimal)pb.y - (decimal)pd.y;
cdy = (decimal)pc.y - (decimal)pd.y;
bdxcdy = bdx * cdy;
cdxbdy = cdx * bdy;
alift = adx * adx + ady * ady;
cdxady = cdx * ady;
adxcdy = adx * cdy;
blift = bdx * bdx + bdy * bdy;
adxbdy = adx * bdy;
bdxady = bdx * ady;
clift = cdx * cdx + cdy * cdy;
return alift * (bdxcdy - cdxbdy)
+ blift * (cdxady - adxcdy)
+ clift * (adxbdy - bdxady);
}