用GDI+画图时,已经实现了2个元素的连接,比如:2个矩形用一条直线的连接,但是由于是连接2个矩形的中心画的线,但是现在要擦去在2个矩形中的线,请教如何实现这一功能,具体算法如何?还有就是,有时候不一定是矩形,有可能是圆角的矩形、梯形等多边形?大虾多指教?
解决方案 »
- 新手刚学正则表达式求在线等
- C# 编的练练看-工程文件,抱歉发迟了
- 打开子窗体与子窗体关闭刷新父窗体问题?
- javascript怎样实现从子页向父页传递参数?
- cmd里能调用C#的exe然后传递参数过去么?
- 请问哪里可以下载Visio 2003 for Enterprise Architects?
- c# web程序中imagebutton按钮怎么实现返回上一页的功能
- 请问C#调用存储过程用DATAGRID控件不能分页要如何修改?
- 服务器端采用BigEndianUnicode编码,如果客户端用API的方法怎么接收这种编码
- 参加过2003 Tech_Ed的朋友们请进!
- 可否使用uddi本机注册、发布WebService?详情请进。。。。
- 一个关于TreeView的问题?
那我在说一下:就是图中有3个元素,2个矩形和一条线(一条线把2个矩形连接起来,通过2个矩形的中心),但是一般画图的话,会把在矩形内的线去处只留矩形外的,就像visio和rose的画图一样,现在就是要去处矩形内部的线,请问如何实现这一算法
能不能细说一下,偶是新手
不好看的,vision和rose都是矩形内部不画的,而且如果是其他多边形可能算法根复杂的
你的方法我早就试过,但是你一旦fill的话,那原来在图行上的字符串就没有了,
你的方法效率太低,画线时要重绘界面上所有元素,方法不怎么好,我还是觉得应该还有更好的数学算法
我就是要这个算法,你有不,贴出来看看
直线:
使用两点式y - y1 / (y2 - y1) = (x -x1) / (x2 - x1)注意 y2 = y1 和 x2 = x1 的特殊情况矩形:四边的直线方程 x = left, x = right, y = top, y = buttom;
中心坐标 (xc,yc)=( (left + right)/2 , (top + buttom) /2)圆:
(x - x0)^2 + (y - y0)^2 = r^2, 其中 x0,y0 为圆心,r为半径。判断直线和图形交点;
计算直线的斜率 k = (y1 - y2) / (x1 - x2) (注意 x1 == x2 的情况)
计算夹角θ = Atan(k);
圆:
交点: (x0 ± r * Cos(θ), y ± r * Sin(θ))
矩形:
(right - left) / (top - buttom) > k :
交点:
x = xc ± (top - buttom) / 2 / k ;
y = yc ± (top - buttom) / 2;(right - left) / (top - buttom) < k :
交点:
x = xc ± (right - left) / 2;
y = yc ± (right - left) / 2 * k ;(right - left) / (top - buttom) == k :
交点:
x = xc ± (right - left) / 2;
y = yc ± (top - buttom) / 2;
正负号的取法根据图形的相对位置判断。