我正在使用.NET GDI +绘制业务对象的自定义图表.除其他外,该图由连接对象的几行组成.
在特定场景中,我需要将一条线缩短一个特定数量的像素,比如说10个像素,即找到线的终点之前10个像素的线上的点.
想象一个半径为r = 10像素的圆,以及一条带有起点(x1,y1)和终点(x2,y2)的直线.圆圈以线的终点为中心,如下图所示.
插图http://i45.tinypic.com/140b5w5.gif
如何计算用红色圆圈标记的点,即圆与线之间的交点?这将为我提供该线的新终点,将其缩短10个像素.
感谢您的答案,我可以将以下程序放在一起.我将它命名为LengthenLine,因为如果我想缩短线条,我发现传递负像素数更自然.
具体来说,我试图组合一个可以绘制圆角线的功能,可以在这里找到.
public void LengthenLine(PointF startPoint, ref PointF endPoint, float pixelCount)
{
if (startPoint.Equals(endPoint))
return; // not a line
double dx = endPoint.X - startPoint.X;
double dy = endPoint.Y - startPoint.Y;
if (dx == 0)
{
// vertical line:
if (endPoint.Y < startPoint.Y)
endPoint.Y -= pixelCount;
else
endPoint.Y += pixelCount;
}
else if (dy == 0)
{
// horizontal line:
if (endPoint.X < startPoint.X)
endPoint.X -= pixelCount; …Run Code Online (Sandbox Code Playgroud)