home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The World of Computer Software
/
World_Of_Computer_Software-02-385-Vol-1of3.iso
/
x
/
xpool-10.zip
/
Xpool
/
goodies.c
< prev
next >
Wrap
C/C++ Source or Header
|
1992-05-26
|
3KB
|
103 lines
/* I. ARIT 1992 Hidirbeyli,AYDIN,TR. 09400
Golden, CO, USA. 80401
Copyright (C) 1992 Ismail ARIT
This file is distributed in the hope that it will be useful,
but without any warranty. No author or distributor accepts
responsibility to anyone for the consequences of using it or for
whether it serves any particular purpose or works at all.
Everyone is granted permission to copy, modify and redistribute
this file under the following conditions:
Permission is granted to anyone to make or distribute copies
of the source code, either as received or modified, in any
medium, provided that all copyright notices, permission and
nonwarranty notices are preserved, and that the distributor
grants the recipient permission for further redistribution as
permitted by this document.
No part of this program can be used in any commercial product.
*/
#include <stdio.h>
#include <math.h>
#include "definition.h"
Distance ThisMuch;
Distance * DistanceChecker_Between (Ball * ThisBall, Ball * ThatBall) {
if ((ThisBall -> In) && (ThatBall -> In)) {
ThisMuch.x = ThisBall -> CurrentL.x - ThatBall -> CurrentL.x;
ThisMuch.y = ThisBall -> CurrentL.y - ThatBall -> CurrentL.y;
ThisMuch.amount = (ThisBall -> radius + ThatBall -> radius) -
sqrt ((ThisMuch.x * ThisMuch.x) + (ThisMuch.y * ThisMuch.y)); }
else {
ThisMuch.x = 0.0000000;
ThisMuch.y = 0.0000000;
ThisMuch.amount = 0.000000;
}
/*
ThisBall -> NeedOneMoreDrawing = ((ThisMuch.amount +6 )>0)? YES : NO;
ThatBall -> NeedOneMoreDrawing = ((ThisMuch.amount +6 )>0)? YES : NO;
*/
return (&ThisMuch);
};
Force ForceToApply;
void
Force_ToObject (Ball * first, Distance * TheirDistance, int type) {
double theForce,
hip;
double radian;
/* let 's create force normal to the contact surface */
theForce = first -> kConstant * TheirDistance -> amount;
/*
dprintf (" total %f k %f d %f \n", theForce, first -> kConstant, TheirDistance -> amount);
dprintf (" d->x %f d->y %f \n", TheirDistance -> x, TheirDistance -> x);
*/
/* let 's calculate x,y componets */
hip = sqrt ((TheirDistance -> x * TheirDistance -> x) +
(TheirDistance -> y * TheirDistance -> y));
ForceToApply.x = theForce * TheirDistance -> x / hip;
ForceToApply.y = theForce * TheirDistance -> y / hip;
if (type == ACTION) {
ForceToApply.x *= -1;
/* reaction to the fists ball */
ForceToApply.y *= -1;
}
/*
dprintf (" # %d x %f y %f fx %f fy %f \n", first -> MyID,
first -> CurrentL.x,
first -> CurrentL.y,
first -> CurrentF.x,
first -> CurrentF.y);
dprintf (" fx %f fy %f \n", ForceToApply.x, ForceToApply.y);
*/
first -> UpdateForce (first, &ForceToApply);
};