Пример #1
0
void point_line_line(Exterior Ex0, Interior I0, Glass G0, mm_np mm, 
					 double gX0, double gY0, double gZ0, double a0, double b0, double c0,
					 Exterior Ex1, Interior I1, Glass G1,
					 double gX1, double gY1, double gZ1, double a1, double b1, double c1,
					 double *x, double *y, double *z)
//Beat L¸thi Nov 2008
{
	double a[3], b[3], A[3], B[3], n[3], AB[3], dist, Bp[3], c,ABp[3], mABp, d,Ae1[3],
		   e1[3], mb,nb[3], cosb, f, Ap[3], App[3], BpAe1[3], mBpAe1;
	double dummy;

	A[0]=gX0;A[1]=gY0;A[2]=gZ0;
	B[0]=gX1;B[1]=gY1;B[2]=gZ1;
	a[0]=a0;a[1]=b0;a[2]=c0;
	b[0]=a1;b[1]=b1;b[2]=c1;
	norm_cross(b,a,&n[0],&n[1],&n[2]);
	AB[0]=B[0]-A[0];
	AB[1]=B[1]-A[1];
	AB[2]=B[2]-A[2];
	dot(AB,n,&dist);
	Bp[0]=B[0]-dist*n[0];
	Bp[1]=B[1]-dist*n[1];
	Bp[2]=B[2]-dist*n[2];
	ABp[0]=Bp[0]-A[0];
	ABp[1]=Bp[1]-A[1];
	ABp[2]=Bp[2]-A[2];
	dot(ABp,a,&c);
	modu(ABp,&mABp);
	d=sqrt(mABp*mABp-c*c);
	Ae1[0]=A[0]+c*a[0];
	Ae1[1]=A[1]+c*a[1];
	Ae1[2]=A[2]+c*a[2];
	BpAe1[0]=Ae1[0]-Bp[0];
	BpAe1[1]=Ae1[1]-Bp[1];
	BpAe1[2]=Ae1[2]-Bp[2];
	modu(BpAe1,&mBpAe1);
	e1[0]=BpAe1[0]/mBpAe1;
	e1[1]=BpAe1[1]/mBpAe1;
	e1[2]=BpAe1[2]/mBpAe1;
	modu(b,&mb);
	nb[0]=b[0]/mb;
	nb[1]=b[1]/mb;
	nb[2]=b[2]/mb;
	dot(e1,nb,&cosb);
	f=d/cosb;
	Ap[0]=Bp[0]+f*nb[0];
	Ap[1]=Bp[1]+f*nb[1];
	Ap[2]=Bp[2]+f*nb[2];
	App[0]=B[0]+f*nb[0];
	App[1]=B[1]+f*nb[1];
	App[2]=B[2]+f*nb[2];

	dummy=sqrt(pow(App[0]-Ap[0],2)+pow(App[1]-Ap[1],2)+pow(App[2]-Ap[2],2));

	*x=0.5*(Ap[0]+App[0]);
	*y=0.5*(Ap[1]+App[1]);
	*z=0.5*(Ap[2]+App[2]);
}
Пример #2
0
int main()
{

    long int test;
    scanf("%ld",&test);
    while(test--)
    {
        scanf("%s",&num);
        int i, n;
        scanf("%d",&n);
        long long int nums;
        int flag=0;
        for(i=0; i<n; i++)
        {
            scanf("%lld",&nums);
            if(1==modu(num,nums))
                flag=1;
        }
        if(flag==0)
            printf("%s - Wonderful.\n",num);
        else
            printf("%s - Simple.\n",num);

    }
    return 0;
}
Пример #3
0
END_TEST


START_TEST(test_modu)
{
    double a[]= {10.0, 0.0, 0.0};
    double m;

    modu(a,&m);

    // fail_unless( m == 10.0);
    ck_assert_msg( fabs(m - 10.0) < EPS,
             "Was expecting m to be 10.0 but found %f \n", m);

}
Пример #4
0
int f (int ia[], st s1, ut *u1)
{
  int *ip;
  st   sl;
  ut   *ul;

  ip = &(ia[3]);
  *ip = 7; /* modifies ia[3] */

  ip = &(ia[*ip]);

  *ip = 8; /* modifies ia[?] */

  model(ia); /* modifies ia[6] */
  ip = ia;
  model(ip); /* modifies ia[6] */

  s1.a = 3;    /* okay */
  *(s1.b) = 7; /* modifies *(s1.b) */
  
  sl = s1;     /* okay (sl is NOT an alias for s1) */
  modst(sl);   /* was: does not modify anything --- structure is passed by value */
               /* NOT TRUE: does modify sl since *s1.b is the same reference */
  sl.a = 3;    /* okay */
  ip = s1.b;   /* okay, ip aliases s1.b */
  *(s1.b) = 3; /* modifies s1.b */
  *ip = 6;     /* modifies s1.b */
  *(sl.b) = 3; /* okay */

  ul = u1;     /* ul aliases u1 */
  modu(ul);    /* okay */
  ul->a = 3;   /* modifies u1->a */
  sl = ul->s;  /* okay */
  sl.a = 3;    /* okay */
  *(sl.b) = 6; /* modifies *(u1->s.b) through alias */
  return 5;
}