Merge remote-tracking branch 'origin/master'

This commit is contained in:
jackfiled 2022-06-02 12:51:21 +08:00
commit c85d1f3049

View File

@ -2,6 +2,7 @@
// Created by ricardo on 2022/5/6.
//
#include "controller.h"
#include "math.h"
bus_query_t *target_query = NULL;
int chosen_strategy = -1;
@ -71,12 +72,77 @@ bus_query_t *FCFSQuery()
bus_query_t *SSTFGetQuery()
{
return NULL;
int a,b,length,min;
a = the_bus->rail_node_pos->id; //是当前公交车的位置,而不是站点位置,应该两者差别不大
b = rails->last_node->id;//总的站点数
if (1 <= a <= b/2)//判断当前站点的位置
{
if (abs(a+b-queries->node->id) < abs(a-queries->node->id) ) //因为是环形轨道用id相减的方式来计算距离的话相减的方法不同
{
min = abs(a+b-queries->node->id);
}
else
{
min = abs(a-queries->node->id);
}
}
else if (b/2 < a <=b)
{
if (abs(queries->node->id+b-a) < abs(a-queries->node->id))
{
min = abs(queries->node->id+b-a);
}
else
{
min = abs(a-queries->node->id);
}
}
//通过上诉把第一个请求的距离置为最小值min
bus_query_t *p = queries->next_node;
bus_query_t *result = queries;//如果第一个请求即最近的那一个result=第一个请求
while (p->time <= bus_time)//在当前的时间找到所有请求中最近的一个
{
if (1 <= a <= b/2)//对当前站点所在的位置进行分类讨论
{
if (abs(a+b-p->node->id) <= abs(a-p->node->id) )
{
if(min >= abs(a+b-p->node->id))
{
min = abs(a+b-p->node->id);
result = p;//把最小距离所对应的请求指针传给result
p = p->next_node;
}
}
}
else if (b/2 < a <=b)
{
if (abs(p->node->id+b-a) <= abs(a-p->node->id))
{
if (min >= abs(p->node->id+b-a))
{
min = abs(p->node->id+b-a);
result = p;
p = p->next_node;
}
}
}
}
return result;//需不需要返回空指针的情况呢?
}
int SSTFDirection(bus_query_t* query)
{
if (query != NULL)
{
if (query->type != BUS_TARGET )
{
return query->type;
}
}
else
{
return BUS_STOP;
}
}
bus_query_t *SSTFBTWQuery()