相关疑难解决方法(0)

缩短一行像素数

我正在使用.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)

.net c# geometry drawing gdi+

12
推荐指数
3
解决办法
2819
查看次数

标签 统计

.net ×1

c# ×1

drawing ×1

gdi+ ×1

geometry ×1