我有两个点结构,我需要根据这些点绘制一个I-Beam,其中每个点代表工字梁两侧的横截面。端盖的宽度应固定且任意。
基本上我需要绘制三条线。首先我将DrawLine(Point1,Point2),然后我需要数学来弄清楚如何在垂直角度上绘制下两行,以便它们以Point1和Point2为中心。
下图显示了我需要根据中心线绘制的内容。但是,这条线可以是任何角度。连接线的Point1和Point2可以是2D空间中的任何位置。
答案 0 :(得分:4)
您可以尝试使用LineCaps:
protected void DrawIBeam(Graphics g, Point fromPoint, Point toPoint)
{
using (GraphicsPath hPath = new GraphicsPath())
{
hPath.AddLine(new Point(-5, 0), new Point(5, 0));
CustomLineCap myCap = new CustomLineCap(null, hPath);
myCap.SetStrokeCaps(LineCap.Round, LineCap.Round);
using (Pen myPen = new Pen(Color.Black, 2))
{
myPen.CustomStartCap = myCap;
myPen.CustomEndCap = myCap;
g.DrawLine(myPen, fromPoint, toPoint);
}
}
}
并称之为:
DrawIBeam(e.Graphics, new Point(10, 10), new Point(60, 60));
答案 1 :(得分:1)
假设宽度是I光束I部分宽度的一半,首先找到您绘制的第一条线的斜率。
接下来,取斜率的负倒数,并从两个方向上的长度宽度的Point1绘制一条直线。这就是为什么宽度是你想要绘制的宽度的一半。
最后,你从两个方向的长度宽度的第2点画一条线。
以下是drawing a perpendicular line的数学公式。