java – 设计这个算法一个更好的方法?
我正在工作一个更复杂的版本(车辆在X和Y方向移动)
我做了这个例子,以获得更好的方法来实现这一点. >我有一辆车以X方向移动(24.5872公里) 我所遇到的问题是“通常即时”的部分.如果我没有得到足够的反应,我认为它将抛弃我的算法的整个时间.什么是更好的方式来处理这种情况? 以下是我要做的一些基本代码: public class Mover implements MessageHandler { private static final long CAR_UPDATE_RATE_IN_MS = 100; private static double currX = 0; private static double CONSTANT_SPEED_IN_MPS = 24.5872; // 55 mph private static double increment = CONSTANT_SPEED_IN_MPS / (1000 / CAR_UPDATE_RATE_IN_MS); static LinkedBlockingQueue<BaseMessage> messageQueue = new LinkedBlockingQueue<BaseMessage>(); // ms private static int incrementor = 0; public static void main(String[] args) { startMoverExecutor(); } private static void startMoverExecutor() { ScheduledExecutorService mover = Executors.newSingleThreadScheduledExecutor(); mover.scheduleAtFixedRate((new Runnable() { @Override public void run() { currX = incrementor * increment; if (incrementor % (1000 / CAR_UPDATE_RATE_IN_MS) == 0) { System.out.println(currX); sendMessage(currX - CONSTANT_SPEED_IN_MPS,currX); // do something try { messageQueue.poll(1000,TimeUnit.MILLISECONDS); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } incrementor++; } }),CAR_UPDATE_RATE_IN_MS,TimeUnit.MILLISECONDS); } @Override public void handleMessage(BaseMessage msg) { messageQueue.add(msg); } protected static void sendMessage(double firstX,double secondX) { // sendMessage here } } 解决方法
我正在提出如上所示的上述算法的更改.
JMS调用其他进程 1A.从发送当前的车辆位置开始. 1B.另一个过程将响应一个JMS消息,其中包含您的车辆位置可见区域中所有“排孔位置”的列表.在客户端保留此列表中的“可见锅孔位置”,以便以下步骤使用. 1C.我们将可视区域定义为车辆的邻近区域,即使使用JMS调用其他过程的(1秒延迟网络延迟),车辆的移动也不应该穿过该区域. 1D.每秒钟后,重复步骤1a和1b,并相对于您的车辆的当前位置替换客户端的锅孔位置列表. . 车载运动观察员 2A.实施可以接收车辆动作通知的观察者模式. 2B.每次发生事件时,观察员将检查车辆的位置是否与步骤1b中获取的可见孔洞列表中的一个条目相匹配. 2C.如果匹配发现,宾果!你必须停下车. . 车辆运动 3A.注册step-2a观察员观察车辆的动作 3B.等到你从第1b步到达第一个可见的坑洞列表. 3C.每100毫秒增加X值,开始移动车辆.每次移动时,应通知步骤2a观察者. . 下图图示: o - Instance of each pot hole somewhere on map X - Moving vehical . - Path followed by vehical Circle - Visible area of the vehical driver +---------------------------------------------+ | | | o o | | o | | | | | | _.-''''`-._ | | o,' `. o | |,' o `. | | .' . `. | | | . . | | | | . | o | | | X | | | o o / | | / | | `.,' | | `-._ _.-' | | `'''' | | | | o | | o | | | | | | o o | +---------------------------------------------+ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |