我想画一条从A点到B点的线。但是,如果B点在A点以下exactly
,那么线本身应该是智能的,应画出一条直线。但是如果B点低于A且远离A水平远,则应以直角方式绘制一条直线。我希望你能得到我。如果您使用过任何UML工具,例如edraw Max或其他任何UML工具,您可能已经看过这些类型的行。知道怎么能实现这个目标吗?
提前致谢:)
答案 0 :(得分:4)
以下是一些代码:
void connectPoints(Point a, Point b)
{
Point middlePoint1(a.x, (a.y + b.y)/2);
Point middlePoint2(b.x, (a.y + b.y)/2);
drawLine(a, middlePoint1);
drawLine(middlePoint1, middlePoint2);
drawLine(middlePoint2, b);
}
为了澄清,提问者实际上想要3段轴对齐线看起来像这里的大多数连接:
答案 1 :(得分:1)
简单方法有什么问题?
// pA, pB - points
DrawLine(pA.X, pA.Y, pA.X, pB.Y); // vertical line from A point down/up to B
DrawLine(pA.X, pB.Y, pB.X, pB.Y); // horizontal line to B
答案 2 :(得分:1)
这是你的直角智力的意思吗?伪随之而来......
Point pA(x,y);
Point pB(x,y);
if abs(pB.X-pA.X) < abs(pB.Y-pA.Y) // Going vertically or horizontal?
{
DrawLine(pA.X, pA.Y, pA.X, pB.Y); //Long vertical
DrawLine(pA.X, pB.Y, pB.X, pB.Y); //Short horizontal
}
else
{
DrawLine(pA.X, pA.Y, pB.X, pA.Y); //Long horizontal
DrawLine(pB.X, pA.Y, pB.X, pB.Y); //Short vertical
}
或弯曲的线条(在我的头顶):
Point pA=(x,y);
Point pB=(x,y)
if abs(pB.X-pA.X) < abs(pB.Y-pA.Y) // Going vertically or horizontal?
{
Point pHalfwayY = (pB.Y-pA.Y)/2 + pB.Y
DrawLine(pA.X, pA.Y, pA.X, pHalfwayY ); //Long vertical 1st half
DrawLine(pA.X, pHalfwayY , pB.X, pHalfwayY ); //Short horizontal
DrawLine(pA.X, pHalfwayY , pA.X, pB.Y); //Long vertical 2nd half
}
else
{
Point pHalfwayX = (pB.X-pA.X)/2 + pB.Y
DrawLine(pA.X, pA.Y,pHalfwayX , pA.Y); //Long horizontal 1st Half
DrawLine(pHalfwayX , pA.Y, pHalfwayX , pB.Y); // Short Vertical
DrawLine(pHalfwayX , pA.Y, pA.X, pB.Y); //Long horizontal 2nd half
}
希望这有帮助。
答案 3 :(得分:0)
像 GDI + 这样的图形库会为你处理它,它会根据它的起点和终点绘制线条。
如果你想自己处理这个问题,你必须使用三角形数学来确定你的线的旋转角度。