绘制线垂直于给定的线(Drawing line perpendicular to a given l

2019-09-22 15:22发布

我有开始和结束线坐标。 我想绘制另一条线在这此这样的粘底,他们将彼此垂直。

我试图做到这一点使用正常的几何形状。 是否有任何高级API有MFC中的相同。

谢谢

Answer 1:

如果(DX,DY)是在给定线在X的差异和Y座标的方式,可以使另一条线垂直通过设计在其坐标的差异为(-dy,DX)。 您可以缩放,通过任何因素(-C * D Y,C * DX),以改变其长度。



Answer 2:

您有一个现有的线(X1,Y1)到(x2,y2)。 垂直线是(A1,B1)到(A2,B2),和集中在(X2,Y2)。

xdif = x2 - x1
ydif = y2 - y1
a1 = x2 - ydif / 2
b1 = y2 + xdif / 2
a2 = x2 + ydif / 2
b2 = y2 - xdif / 2

我认为,工程...我测试了几行。

因此,如果你有一个线从(1,1)将(5,3),垂直线将是(5 - 2/2,3 + 4/2)到(5 + 2/2,3 - 4 / 2)或(4,5)至(6,1)。



Answer 3:

你可以使用SetWorldTransform函数从Win32的GDI API。

示例代码是在这里 。



Answer 4:

我要补充的基础上kbelder回答一些C ++代码。 这使得通过原点(X1,Y1)和其他顶点一个顶点(x2,y2)

float GetDistance(float x1, float y1, float x2, float y2)
{
 float cx = x2 - x1;
 float cy = y2 - y1;
 float flen = sqrtf((float)(cx*cx + cy*cy));
 return flen;
}

void GetAxePoint(double x1, double y1, double x2, double y2, double& x3, double& y3, double vec_len, bool second_is_y)
{
 double xdif = x2 - x1;
 double ydif = y2 - y1;

 if(second_is_y)
 {
  x3 = x1 - ydif;
  y3 = y1 + xdif;
 }
 else
 {
  x3 = x1 + ydif;
  y3 = y1 - xdif;
 }

 double vec3_len = GetDistance(x3, y3, x1, y1);

 x3 = (x3-x1)/vec3_len;
 y3 = (y3-y1)/vec3_len;

 x3 = x1 + x3*vec_len;
 y3 = y1 + y3*vec_len;
}


文章来源: Drawing line perpendicular to a given line