垂直于给定线的绘制线

时间:2012-09-19 16:01:39

标签: c++ visual-c++ mfc

我有一条线的起点和终点坐标。我想在此末尾画出另一条线,使它们彼此垂直。

我试图使用普通几何体来做到这一点。 MFC中是否存在任何高级API。

由于

4 个答案:

答案 0 :(得分:6)

如果(dx,dy)是给定直线的x和y坐标的差异,则可以通过设计其坐标差异(-dy,dx)使另一条直线垂直。您可以通过任何因子(-c * dy,c * dx)来缩放它以更改其长度。

答案 1 :(得分:4)

您有一条现有的行(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)。

答案 2 :(得分:0)

您可以使用Win32 GDI API中的SetWorldTransform函数。

示例代码为here

答案 3 :(得分:0)

让我根据kbelder答案添加一些c ++代码。它按原点(x1,y1)和另一个顶点(x2,y2)制作一个顶点

enter image description here

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;
}