Ejemplo n.º 1
0
/*	判断待求点在哪个圆心范围内	*/
int yanxin(double cx, double cy)
{
	struct point u1;
	struct point u2;
	struct point v1;
	struct point v2;
	double A = 0.0;
	int i = 0;
	int loop = 0;
	
	cx = (R_L > 0) ? cx : cx * R_L;	/*	判断应用在左幅还是右幅	*/
	do{
		u1.x = SD_start_x[i];
		u1.y = SD_start_y[i];
		u2.x = SD_end_x[i];
		u2.y = SD_end_y[i];
		v1.x = SD_circle_x[i]+sd_d;
		v1.y = SD_circle_y[i]+sd_h;
		sd_scr = FS_D(v1.x, v1.y, cx, cy);
		A = FS_A(v1.x, v1.y, cx, cy,0);
		
		/*	把线延长2.929米(暂定),再做判断	*/
		v2.x = cx + (2.929 + sd_scr) * (cos(A*PI/180.0));
		v2.y = cy + (2.929 + sd_scr) * (sin(A*PI/180.0));
		loop = (intersect_in(u1,u2,v1,v2));
		if (loop)	break ;
		i += 1;
		if (i >= SD_size)	return FALSE;	/*	超出下限终止	*/
	}while(!loop);
	if (SD_R[i] == 0)	return FALSE;
	if (SD_R[i] > 0)	sd_cqw = sd_scr - (SD_R[i]+sd_r);
	if (SD_R[i] < 0)	sd_cqw = fabs(cx-v1.x) - abs((SD_R[i]+sd_r));
	return TRUE;
}
Ejemplo n.º 2
0
bool crossline(int x1,int x2,int y1,int y2)
{
    point u1,u2,v1,v2;
    u1.x=a[x1][0];u1.y=a[x1][1];
    u2.x=a[x2][0];u2.y=a[x2][1];
    v1.x=a[y1][0];v1.y=a[y1][1];
    v2.x=a[y2][0];v2.y=a[y2][1];
    return intersect_in(u1,u2,v1,v2);
}
Ejemplo n.º 3
0
double solve()
{
	if(l1.a.y==l1.b.y || l2.a.y==l2.b.y || (!intersect_in(l1,l2)) ||
    parallel(l1,l2))
		return 0;

	if(l1.a.y>l1.b.y+eps)	swap(l1.a,l1.b);
	if(l2.a.y>l2.b.y+eps)	swap(l2.a,l2.b);

	point ip=intersection(l1,l2);

	if(l1.b.y<ip.y || l2.b.y+eps<ip.y)
		return 0;

	point h,l;
	bool flag=true;
	if(l1.b.y>l2.b.y+eps)
	{
		h=l1.b;
		l=l2.b;
	}
	else if(l1.b.y<l2.b.y-eps)
	{
		h=l2.b;
		l=l1.b;
	}
	else
	{
	    flag=false;
	    h=l2.b;
		l=l1.b;
	}

	if(flag && ((h.x>=l.x && ip.x+eps< l.x &&(l.y-ip.y)*(h.x-ip.x) < (l.x-ip.x)*(h.y-ip.y)+eps) ||
             (h.x<=l.x && ip.x> l.x+eps&&(l.y-ip.y)*(h.x-ip.x) > (l.x-ip.x)*(h.y-ip.y)-eps)))
		return 0;

	line tmp;
	tmp.a.x=min(min(l1.a.x,l2.a.x),min(l1.b.x,l2.b.x));
	tmp.b.x=max(max(l1.a.x,l2.a.x),max(l1.b.x,l2.b.x));
	tmp.a.y=tmp.b.y=l.y;

	point p1=intersection(tmp,l1);
	point p2=intersection(tmp,l2);

	double dist=p1.x-p2.x;
	if(dist<-eps) dist*=-1;
	return dist*(l.y-ip.y)/2;
}