Ejemplo n.º 1
0
//线段判交
int cross(point a,point b,point c,point d)
{
    int d1,d2,d3,d4;
    //double s1,s2,s3,s4;
    d1 = dblcmp(mulc(a,b,c));
    d2 = dblcmp(mulc(a,b,d));
    d3 = dblcmp(mulc(c,d,a));
    d4 = dblcmp(mulc(c,d,b));
    //规范相交
    if((d1 ^ d2) == -2 && (d3 ^ d4) == -2) return 1;
    else
    //非规范相交
    if((d1 == 0 && muld(a,b,c) <= 0)||(d2 == 0 && muld(a,b,d) <= 0)
     ||(d3 == 0 && muld(c,d,a) <= 0)||(d4 == 0 && muld(c,d,b) <= 0)) return 1;
    return 0;
}
Ejemplo n.º 2
0
V mul(ST s){O a,b;b=pop(s);if(b->t==TA){while(len(b->a)>1)mul(b->a);psh(s,dup(top(b->a)));dlo(b);R;};a=pop(s);if(a->t==TA)TE;if(a->t==TS){if(b->t!=TD)TE;psh(s,muls(a,b));}else psh(s,muld(a,b));dlo(a);dlo(b);} //mul