- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在使用 .NET GDI+ 绘制业务对象的自定义图表。除其他外,图表由连接对象的几条线组成。
在特定情况下,我需要将一条线缩短特定数量的像素,比方说 10 个像素,即找到位于线终点前 10 个像素的线上的点。
想象一个半径为 r = 10 像素的圆,以及一条起点为 (x1, y1) 和终点为 (x2, y2) 的线。圆以直线的终点为中心,如下图所示。
如何计算标有红色圆圈的点,即圆与直线的交点?这将为我提供直线的新终点,将其缩短 10 个像素。
感谢您的回答,使我能够整理出以下程序。我将其命名为 LengthenLine,因为我发现如果我想要缩短线条,传递负数像素更自然。
具体来说,我试图将一个可以绘制圆角线的函数放在一起,可以找到here。 .
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;
else
endPoint.X += pixelCount;
}
else
{
// non-horizontal, non-vertical line:
double length = Math.Sqrt(dx * dx + dy * dy);
double scale = (length + pixelCount) / length;
dx *= scale;
dy *= scale;
endPoint.X = startPoint.X + Convert.ToSingle(dx);
endPoint.Y = startPoint.Y + Convert.ToSingle(dy);
}
}
最佳答案
找到方向向量,即让位置向量为(使用 float )B = (x2, y2) 和 A = (x1, y1),然后 AB = B - A。通过除以其长度( Math.Sqrt(xx + yy) )。然后将方向向量AB乘以原长度减去圆的半径,加回到直线起始位置:
double dx = x2 - x1;
double dy = y2 - y1;
double length = Math.Sqrt(dx * dx + dy * dy);
if (length > 0)
{
dx /= length;
dy /= length;
}
dx *= length - radius;
dy *= length - radius;
int x3 = (int)(x1 + dx);
int y3 = (int)(y1 + dy);
编辑:修复了代码,aa 并修复了最初的解释(认为您希望直线从圆的中心到圆周:P)
关于c# - 将一条线缩短若干像素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1866903/
如何迭代(一行)分割函数给我的每个类? 我试过这个: 编辑(抱歉) $("p").attr("class").split(' ').each (function (i,n){alert(n)}
我有一条垂直线和一条水平线,当我动态调整我的 Canvas 父级时,我想调整它们的大小。 (地标) 我希望水平线始终距 Canvas 的左右边界 25 处,距底部边界 13 处。 垂直线也是如此,距上
我有一个 y 变量,我试图在图形的顶部和底部针对两个相关的 x 轴绘制它(例如 y="立方体中的事物数",x1="立方体的边长", x2="立方体的体积")。我在 numpy 数组中有 y、x1、x2
我想画一条简单的水平线,并在这条线 flex 的地方制作动画。我有这个动画的视频。你能给我一些建议如何开始以及我必须使用哪个 js/css 吗? 都是关于矩形底部的线: http://www.stop
我是一名优秀的程序员,十分优秀!