有时候拖动一个窗口的时候可能直接拖出去了那就再也拖不回来只能reset重新来过:



  于是开了个类成员变量在start里记录了一下panel的位置:

var lp = panel.GetComponent<RectTransform>().localPosition;
localPosition = new Vector2(lp.x,lp.y);

  在OnClick中将其复原:

panel.GetComponent<RectTransform>().localPosition = localPosition;

  这样再点击对应的按钮就能复原panel的位置了!

  那个坐标轴我都放到原点了为啥还要放到相机里当儿子,为自己感到智商捉急。



  也许使用者不想看见这个丑陋的坐标轴,于是我又添加了按钮A来控制它是否显示。



  换了一种计算接触点的方法,枚举选中物体和未选中物体的三角面片,各自生成与x、y、z轴平行的包围盒然后算包围盒的相交部分,再生成x、y、z缩放比例与相交部分对应的不规则球,复杂度是三角面片数量的平方的,效果如下:



  很明显的缺陷就是如果三角形太大并且不平行坐标轴就会导致较大误差,就像这样:



  如果接触点过多会导致异常的卡,上图有1w多个接触点,就很卡了。

  想让结果更精确就得将三角形划分得更细致,于是又得弄个slider让用户能控制一个物体三角面片的数量。

  划分三角形的时候我每次都找最长边最长的三角形进行划分,在最长边上取个中点然后和该边所对顶点一连线就成了两个小三角形。本来想用堆来维护的,但是发现捉急的c#没有优先队列这个玩意,难不成还得手写一个?

  网上搜了搜,发现一个叫作sortedList的东西貌似可以用用。

  写完之后运行才发现这货不能有重复键的点,被坑了。。



  魔高一尺道高一丈,网上还是有解决不能有重复键的方法,那就是自定一个类,顺便学会了c#如何比较自定义的类的两个实例的大小,具体请看C# SortedList 可重复键的排序键/值对集合

  然而用了这个方法GetByIndex方法就消失了,真是神奇得可怕,搞得我只能让它从大到小排序然后用GetEnumerator方法来访问第一个元素,再用removeAt(0)删除第一个元素了。

  然后发现sortedlist插入移除复杂度竟然是O(n)的,真是****....不过人家的名字都带list了你还以为它效率能高到哪里去?真是太天真了。

  貌似sortedDictionary是个不错的替代品。唉,当初自己手写队列早就弄完了,还会用这些渣渣封装数据结构?不过我竟然会对这些鬼东西感兴趣,所以还是了解一下吧。各集合类型的性能分析请看C#集合类型总结和性能分析

  当然为了用到sortedDictionary的Remove函数,比较类要写成这样:

public class CostComparer:IComparer<Cost>
{
public int Compare(Cost x,Cost y)
{
if (x.cost == y.cost && x.id == y.id)
return 0;
if (x.cost < y.cost||(x.cost==y.cost&&x.id<y.id))
return 1;
else
return -1;
}
}

  之前少了第一个if导致一直remove失败,现在终于好了!

  还有就是要取到第一个元素得这么写,不要少了moveNext,否则取到的啥都没有:

var e = sd.GetEnumerator();
e.MoveNext();
var ec = e.Current;
int[] triangle = ec.Value;//取最长边最长的三角形进行划分

  终于过编译了,来看看效果。先是1倍三角形:



  接下来就是见证奇迹的时刻:



  瞬间爆炸,不知道哪里写萎了,不过已经搞到晚上10点钟了,明天再接着找bug吧,因为欢乐时光就要开始了!

3dContactPointAnnotationTool开发日志(十五)的更多相关文章

  1. 3dContactPointAnnotationTool开发日志(五)

      今天要做的第一件事就是把obj文件里不同的对象分割开来.   通过仔细观察发现obj文件中以"o "开头的行会跟着一个对象的名字.g代表对象所属组名,我这里只要用到对象名就行了 ...

  2. 仿酷狗音乐播放器开发日志十九——CTreeNodeUI的bug修复二(附源码)

    转载请说明原出处,谢谢 今天本来打算把仿酷狗播放列表的子控件拖动插入功能做一下,但是仔细使用播放列表控件时发现了几个逻辑错误,由于我的播放 列表控件是基于CTreeViewUI和CTreeNodeUI ...

  3. 3dContactPointAnnotationTool开发日志(三十)

      在vs2017里生成opencv时遇到了无法打开python27_d.lib的问题,具体解决请看这个,不过我用的是方法2,python37_d.lib找不到同理.   Windows下可以用的op ...

  4. 3dContactPointAnnotationTool开发日志(二五)

    记录一下当前进度:

  5. 3dContactPointAnnotationTool开发日志(二十)

      为了使工具更人性化,我又在每个status的text上绑了个可以拖拽实现值改变的脚本,但是不知道为啥rotx那个值越过+-90范围后连续修改就会产生抖动的现象,试了很多方法也没能弄好,不过实际用起 ...

  6. 3dContactPointAnnotationTool开发日志(十九)

      增加了输出接触点信息到文件功能.

  7. 3dContactPointAnnotationTool开发日志(十八)

      今天实现了tab效果,按tab键可以在status面板的各个输入框内来回切换,参考Unity3D - UGUI实现Tab键切换输入框.按钮(按Tab键切换高亮显示的UI)

  8. 3dContactPointAnnotationTool开发日志(十六)

      调了一上午才发现是把下面这个函数: private float DivideTriangle(int []triangle,out int []outTriangle,List<Vector ...

  9. 3dContactPointAnnotationTool开发日志(十四)

      貌似每次让用户手动输入文件路径太不人道了,于是参考Unity 实用教程 之 调用系统窗口选择文件或路径增加了让用户浏览文件的功能,点击输入框旁边的+就可以找到文件并加载进来:   貌似调整位置再计 ...

随机推荐

  1. 谈谈php对象的依赖

    通过构造函数的方法 <?php //定义一个类,后面的类依赖这个类里面的方法 class play { public function playing() { echo "I can ...

  2. Python对文件目录的操作

    python中对文件.文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块. 得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd()返回指定目录下的所有文件和目录 ...

  3. laravel-admin 创建数据库并生成控制器

    以user表为例 1. 生成迁移:php artisan make:migration create_users_table 在 database/migration 中生成迁移文件,可对迁移文件进行 ...

  4. Hive--关联表(join)

    在hive中,关联有4种方式: 内关联:join on 左外关联:left join on 右外关联:right join on 全外关联:full join on 另外还有一种可实现hive笛卡儿积 ...

  5. jz2440_lcd

    VDEN      使能信号 HSYNC    水平方向的同步信号 VSYNC    垂直方向的同步信号 LED-/LED+   背光信号 VCLK       时钟信号 VD0~VD23    数字 ...

  6. django创建第一个django项目-2

    安装django 虚拟环境下执行命令: pip install django==1.11.11 查看是否安装成功 pip list 列表中有django说明安装成功 创建工程 命令行移动到想要创建项目 ...

  7. Git Status 中文乱码解决

    现象: jb@H39:~/doc$ git statusOn branch masterYour branch is up-to-date with 'origin/master'. Untracke ...

  8. SQL条件判断中字符串后面有空格的问题

    也不知何时才有的概念,还是以前一直没有注意,从哪也没有听说过的定义,今天又遇见了一个小坑,特记录下来,防止再陷坑! 才疏学浅,文笔有限,简单点说吧,就是在写SQL Server语句时,以前使用了 WH ...

  9. 版本控制工具——Git的拓展使用

    一.使用Github 通过前面两节已经配置了SSH Key与Github上的相关设置,接下来介绍常用的使用 使用Fork克隆一份到本地仓库 之后可以在自己的仓库克隆一份到本地 git clone gi ...

  10. Ruby & Rails学习资料

    ------------------教程------------- Ruby风格指南(代码规范) https://github.com/bbatsov/ruby-style-guide 笨方法學 Ru ...