当前位置: 代码迷 >> C# >> c# Winform 交通仿真实现思路也许解决方案
  详细解决方案

c# Winform 交通仿真实现思路也许解决方案

热度:37   发布时间:2016-05-05 04:22:05.0
c# Winform 交通仿真实现思路或者解决方案
是交通相关的一个系统,目前在做一个仿真效果,看了老外做的一个软件,希望大家可以给点思路,有点棘手。
数据是从设备通过TCP发送回来的,50MS的数据,这个时候车辆是在实时改变的,大家可以看看以下GIF图片,
右边红色的点代表车辆,根据左边的数据,来向或者去向。而且这个界面可以用鼠标等比缩小和放大,不知道怎么实现的,有做过类似项目的如果可以给出建设性的建议或者代码,我会现金报酬的,谢谢!积分先200 不够我再加!

------解决思路----------------------


这个GDI+要很熟练才行,,不停的绘制的,至放放大缩小,要把相对的绘画进行等比列放大缩小
------解决思路----------------------
这东西太牛逼了……
------解决思路----------------------
我觉得你这个最好参考2D动画的实现来做……每一个红点(车)都是一个对象,然后都有各自的速度什么的(当然这个速度都是由你的数据决定,并且根据传递的数据进行修正),还有你这个到底是demo,还是真的根据数据来,万一撞车了你怎么办,如果是模拟的话,那就还要有碰撞机制,我真心觉得你这个可以作为一个游戏来开发了……
------解决思路----------------------
碰撞之后还会有力学……
要根据撞的角度左右移动,然后万一旁边又有车子……

好吧,我想象力太丰富了
------解决思路----------------------
你还以是WPF方向去找吧,WINFORM的会有难点
一步一步来,先画网格,
把里面的图按N个方格来画,一个小车占用N个格子(纵向) 
这有点类拟于游 戏地图,也是用格式来拼接的。
分Layder
底层道路层
上层小车层。小车根据数据转换成格子坐标进行移动。

这跟之前做过的游 戏客户端类拟

------解决思路----------------------
你就别想着数所据绑定了。这个肯定要自己去绘制的。
GDI+动画就是把一个物体绘在一个画布的坐标上。然后擦除,设新坐标再绘。再擦除 再绘。这样我们人看起来车在动了。
------解决思路----------------------
自己用GDI+画吧,没什么现成的控件可用
------解决思路----------------------
话说你们都没有搞过GDI+
什么意思
GDI+有什么难的吗

不就是画矩形,画线,画点,画多边形,填充颜色,就跟windows画图板差不多,只不过不是让你鼠标去画,而是代码画罢了
------解决思路----------------------
你不会做窗体吗?不知道有窗体控件吗?
真不知道你们是怎样写桌面程序的界面的,一上来就是 GDI+
每辆车为一个控件,改变 Location 属性就可使他动起来

可使用 Label 或 PictureBox 控件

缩放就是同时改变控件的 Location、Width、Height 属性
地球人都知道

不是说不能用 GDI+,但是既然有更简单的途径,为什么不走呢?
------解决思路----------------------
用GDI的话估计难产啊,看兄弟已经发了好几贴了都

不知道FLEX能否解决,或者直接用GIS
------解决思路----------------------
传过来的数据是真实的位置,显然你需要通过计算映射到你的坐标系
------解决思路----------------------
引用:

之前的数据处理就是为这个做准备的 这是项目中最大难度的一个功能,我开始是想,放一个控件代表一辆车,根据50MS的数据,解析出来以后最大是220,然后不停的减少,数据倒是解析完了 就是跟界面关联起来,这尼玛- -!

挺简单的东西,改变左边标尺时右边的整个子控件的放大缩小都不需要写3、4行代码(甚至根本不需要写代码,只要在Blend之类的上面用鼠标拖一下让两个属性关联起来)。整个开发(包括道路画线、左边的标尺等等)半天到一天抓点紧就应该做完了。关键是不要纠缠在什么“绘图”这类低级的东西上。如果你什么从低级出发,而不善于使用最恰当的多媒体系统开发,那么还是把这种开发交给那些能够轻松使用UI控件(包括为了各种游戏精灵而开发自定义用户控件)进行开发的人吧,因为只有他们不是花时间仅仅去“玩一玩儿底层”的。
------解决思路----------------------
使用底层的方式一遍遍刷新绘制,虽然看上去也很简单就能完成,但是有经验之后就知道,真正的难点在于“你无法随时修改布局设计”。如果你写1000行代码,一开始你肯定没有对UI设计想好,这时候每天需要修改20次设计,每一次都是很痛苦的事情。甚至在修改10次以后也就放弃了。

而如果你非常轻松地就能看到多媒体程序设计效果,像一个美工一样几乎不需要写什么代码就能几秒钟内看到你重新设计的UI效果,这时候你就能把精力放到快速迭代开发这个 UI 程序上。

所以如果你不熟练后者所需要的工具,你平常开发时改变几十个精灵的 UI 也需要一天时间(而不是10分钟),那还是把涉及到 UI 开发的事情交给其他人去开发吧。自己做点 OA 那样的增上改查 UI 程序。
------解决思路----------------------
建议尝试OPENGL,这样很容易改动视角,性能也没问题
------解决思路----------------------
这项目我看过别人做的差不多的,人家是GDI+绘制做的,做出来的效果不错!
------解决思路----------------------
如果不做缩大放小的话,GDI解决这个问题难度不大,我们的一个项目是每S从设备上采集100多种类型数据点,让后把这些点形成曲线展示在用户面前,这些点随着时间向前移动。

如果让我来做的,我想到的思路就是:
   1、以界面的刷新频率(或者数据的接收频率)来重绘整个画布;
   2、降接收的数据如何转换到画布上,这个是关键,整个画布是按照(X,Y)来定位的,你得把收到的数据转换成(X,Y),这个是最难的,需要你自己设计一个合理的算法。
   3、至于车子的移动,其实根本不用考虑,因为这个数据实时反馈我来的,而我们又是实时的给它反馈到我们得画布上去的,只要刷新率够高,车子在砸门画布上就是一个实时移动的图像。

最后一个建议,你可以自己先写一个小的程序,比如画一个点,每次重绘的时候给Y轴或者X轴增加或减少一个常量,来看一下效果
------解决思路----------------------
这东西太牛逼了……
------解决思路----------------------
加我企鹅 我给你做648144601
------解决思路----------------------
引用:
Quote: 引用:

如果不做缩大放小的话,GDI解决这个问题难度不大,我们的一个项目是每S从设备上采集100多种类型数据点,让后把这些点形成曲线展示在用户面前,这些点随着时间向前移动。

如果让我来做的,我想到的思路就是:
   1、以界面的刷新频率(或者数据的接收频率)来重绘整个画布;
   2、降接收的数据如何转换到画布上,这个是关键,整个画布是按照(X,Y)来定位的,你得把收到的数据转换成(X,Y),这个是最难的,需要你自己设计一个合理的算法。
   3、至于车子的移动,其实根本不用考虑,因为这个数据实时反馈我来的,而我们又是实时的给它反馈到我们得画布上去的,只要刷新率够高,车子在砸门画布上就是一个实时移动的图像。

最后一个建议,你可以自己先写一个小的程序,比如画一个点,每次重绘的时候给Y轴或者X轴增加或减少一个常量,来看一下效果


还有一个问题请教一下,比如绘制一个车辆矩形的时候,

Graphics g = this.CreateGraphics();      //--- 创建画板 
                            Pen p = new Pen(Color.Red, 10);
                            g.DrawRectangle(p, a, b, c, d);

参数B里面的值就是一直在改变的Y轴,我将数据和设备连接起来,赋值给b,这个时候界面的效果是这样的,应该如何操作?
数据是关联了,但是它是曼曼的绘制成了一条线 而不是改变了位置,按照x,y轴来看,改变的应该只是Y轴吧?

你画的是矩形,A,B,C,D,A和B点事要一直变动的(矩形的左上角的点),CD不变(是矩形的长宽),通过变换A点和B点来做,具体参考,你可以学习一下画矩形是各个参数代表什么然后在动手
我个人觉得,这个项目没有什么难度,你可以自己做一下,对你自己也是一个提升
------解决思路----------------------
所有的数据是模拟还是实时接收?模拟和实时真实数据还是有区别的.
  相关解决方案