【GDI+】一些规则多边形分离的问题
在近期的工作中,需要做一样工作:将一些有规则的图形,进行适当的分离,以达到不重叠的问题。
首先组成图形的点都可以是按照逆时针排好序的。
规则的图形可以大致分为三类:
A :两个点组成的线 或者 四个点组成的矩形
B:多个点组成的矩形,其中一对边不包含别的A类中的矩形的边或者线的起止点,另外一边相反:包含A类中矩形的一条边或者线的起止点,可以称这一类边为“可移动边”
C: 多个点组成的矩形,两个边都为“可移动边”。

目前分离的方式:
A类不移动,B、C类沿“可移动边”的垂直方向移动。

目前存在的问题:
A类不动:移动后,B、C类可能贴近了A
B、C类:由于可能存在B、C类沿相同的向量移动,所以,如果移动前有重叠,则移动后,一样会重叠。
改进方案:
A类型中两个点的线,视为“可移动边”,进行移动
A类型中的四个点组成的矩形,因为一般情况下,A类的矩形应该是在B、C类的内部,并且只有一对平行边在B、C类的“可移动边”上,所以可沿着一对平行边的方向向内部压缩一半
B、C类中移动时,如果已经有了相同的移动向量后,此次移动,只移动一般的距离。

画图好麻烦啊~ 有机会再上图了
再改进:
其实可以在平移完毕后,判断下有没有三点共线,有则将B、C类反向移动一半
再想想怎么优化
ps:
在线绘制流程图工具:
http://jgraph.github.io/mxgraph/javascript/examples/editors/workfloweditor.html
在线PS:
http://pixlr.com/editor/?loc=zh-cn
【GDI+】一些规则多边形分离的问题的更多相关文章
- MFC 用gdi绘制填充多边形区域
MFC 用gdi绘制填充多边形区域 这里的代码是实现一个三角形的绘制,并用刷子填充颜色 在OnPaint()函数里面 运用的是给定的三角形的三个点,很多个点可以绘制多边形 CBrush br(RGB( ...
- H5游戏开发之多边形碰撞检测
2D多边形碰撞检测介绍这是一篇论证如何在2D动作游戏中执行碰撞检测的文章(Mario,宇宙入侵者等),为了保证它的高效性和精确性,碰撞检测是以多边形为基础的,而不是以sprite为基础.这是两种不同的 ...
- GDI+系列
1.GDI+的概述 2.绘图表面 3.GDI+坐标系 4.用Pen对象画图 1.使用GDI+画线 2.使用GDI+画弧线 3.使用GDI+画曲线 4.使用GDI+画椭圆 5.使用GDI+画矩形.多边形 ...
- 规则引擎-BRMS在企业开发中的应用
1. 什么是规则复杂企业级项目的开发以及其中随外部条件不断变化的业务规则(business logic),迫切需要分离商业决策者的商业决策逻辑和应用开发者的技术决策,并把这些商业决策放在中心数据库或其 ...
- Drrols规则引擎
1.什么是规则引擎? 规则引擎是一种嵌套在应用程序中的组件,它实现了将业务规则从应用程序代码中分离出来.规则引擎使用特定的语法编写业务规则,规则引擎可以接受数据输入.解释业务规则.并根据业务规则做出相 ...
- 商业规则引擎IBM WebSphere ILog JRules概述,开发基础教程
Ilog Jrules开发基础教程有7篇,地址规则引擎Ilog Jrules开发基础教程[连载1]-- 概述篇 概述篇 规则引擎是一种嵌套在应用程序中的组件,它实现了将业务规则从应用程序代码中分离出来 ...
- NeHe OpenGL教程 第八课:混合
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- 第08课 OpenGL 混合
混合: 在这一课里,我们在纹理的基础上加上了混合,它看起具有透明的效果,当然解释它不是那么容易,当希望你喜欢它. 简单的透明OpenGL中的绝大多数特效都与某些类型的(色彩)混合有关.混色的定义为,将 ...
- 剖析虚幻渲染体系(14)- 延展篇:现代渲染引擎演变史Part 1(萌芽期)
目录 14.1 本篇概述 14.1.1 游戏引擎简介 14.1.2 游戏引擎模块 14.1.3 游戏引擎列表 14.1.3.1 Unreal Engine 14.1.3.2 Unity 14.1.3. ...
随机推荐
- 【转】Http Cache最基本的一些东西
Http Cache最基本的一些东西 Cache浏览器IEwebkitApache Http的Cache机制总共有4个组成部分: Cache-Control: max-age=N(seconds) ...
- 查看CentOS上Apache位置,版本,停止,启动
查看Apache是否被安装: [root@asg11 ~]# find / -name 'httpd'/etc/sysconfig/httpd/etc/httpd/etc/logrotate.d/ht ...
- C语言语句分类:大致可分为六大类
#include <stdio.h> void main() { int sign, i, n; float sum; printf("please input an integ ...
- APP源码集中打包大放送!十一个千万级别APP源码随意处置!
小伙伴们还在一个一个苦苦寻找各类APP源码吗?此贴集中打包最常用APP的源码,你想得到的APP,这里都有! 想做商城?这里有天猫! 想做同城服务?这里有大众点评! 想做外卖?这里有饿了么! 想做视频? ...
- Java8 新特性default
在JDK1.8的Iterator接口中 package java.util; import java.util.function.Consumer; public interface Iterator ...
- Spring Boot 4 MyBatis
SpringBoot内使用MyBatis,可以不使用xml映射配置,通过注解方式映射. pom.xml添加依赖 <dependency> <groupId>org.mybati ...
- 让SpringMVC支持可版本管理的Restful接口
需求 移动互联网时代的到来,软件开发的模式也在变化.记得以前做B/S的后台开发,基本上没有Http接口一说,全部是通过渲染模板技术(jsp,freemark)把最终html展示给最终用户.现在完全变了 ...
- js随机更换
如果想实现“随机”切换图像,那么我们要使用到几个Math()对象 第一个是random()函数,函数的功能是产生随机数,如果书写为 var a=Math.random() 那么所产生的随机数是0-1( ...
- canvas学习之制作动画
html部分 ...... <body> <canvas id="myCanvas" width="400" height="400 ...
- snapshot standby database
快照备库接收和归档主库发送来的redo,但是不会应用:切换成physical standby之后会自动开启redo apply.快照standby不可以参加主备切换:在最大保护性模式下,如果只有一个备 ...