116
X-Machines for Agent-Based Modeling: FLAME Perspectives
Corridor Agent. Contains locations of the corridor to allow the people to
walk along the pathways. Sends information to all persons about wall
locations to steer them in the right direction towards exits.
5.3.1 Calculate Movement toward Other Agents
int follow_leader()//calculate force to move towards leader
{
int leader_group_member=-1;
double shortest_distance=99999.0;
double current_distance_squared=0.0;
double leader_x, leader_y;
double leader_velx,leader_vely;
double leader_personx;
double leader_persony;
double myvel,myxy;
double leader_personvel;
double diffxy,diffvel;
double posDiff;
double springForce,dotRoot;
double restLength=0.7;
double strength=0.45;
double damping=0.5;
double dampingForce;
//check all person location messages to find group members
send_person_location_message = get_first_send_person_location_message();
while(send_person_location_message)
{
if(send_person_location_message->group_id==GROUP_ID)
{
if((send_person_location_message->is_leader==1)
&&(send_person_location_message->id!=ID))
{
current_distance_squared=
(send_person_location_message->x-X)*(send_person_location_message->x-X)+
(send_person_location_message->y-Y)*(send_person_location_message->y-Y);
if(current_distance_squared < shortest_distance)
{
shortest_distance = current_distance_squared;
leader_group_member = send_person_location_message->id;
leader_x =send_person_location_message->x;
leader_y = send_person_location_message->y;
leader_velx = send_person_location_message->velx;
leader_vely = send_person_location_message->vely;
}
}
}
send_person_location_message =
get_next_send_person_location_message(send_person_location_message);
}
if(leader_group_member != -1)
Précédent

- 145/329

Suivant