c++ 已知两点坐标,获取该线段的垂直线段坐标
时间: 2023-10-25 17:07:54 浏览: 333
首先需要求出这条线段的中点坐标,可以通过如下代码实现:
```c++
CPoint p1(10, 10); // 两点坐标
CPoint p2(50, 50);
float centerX = (p1.x + p2.x) / 2;
float centerY = (p1.y + p2.y) / 2;
CPoint center(centerX, centerY); // 中心点坐标
```
然后可以通过向量的方法求出这条线段的法向量,即垂直线段的方向向量,代码如下:
```c++
float dx = p2.x - p1.x;
float dy = p2.y - p1.y;
float length = sqrt(dx * dx + dy * dy); // 线段长度
dx /= length; // 归一化向量
dy /= length;
float offsetX = -dy * 10; // 偏移量(这里取10,可以根据需要调整)
float offsetY = dx * 10;
```
其中,`offsetX`和`offsetY`是垂直线段方向向量的x、y分量,`10`是垂直线段的长度,可以根据需要自行调整。
最后,可以通过中点坐标和垂直线段方向向量求出垂直线段的起点和终点坐标,代码如下:
```c++
CPoint start(centerX + offsetX, centerY + offsetY); // 垂直线的起点坐标
CPoint end(centerX - offsetX, centerY - offsetY); // 垂直线的终点坐标
```
完整代码如下:
```c++
CPoint p1(10, 10); // 两点坐标
CPoint p2(50, 50);
float centerX = (p1.x + p2.x) / 2;
float centerY = (p1.y + p2.y) / 2;
CPoint center(centerX, centerY); // 中心点坐标
float dx = p2.x - p1.x;
float dy = p2.y - p1.y;
float length = sqrt(dx * dx + dy * dy); // 线段长度
dx /= length; // 归一化向量
dy /= length;
float offsetX = -dy * 10; // 偏移量(这里取10,可以根据需要调整)
float offsetY = dx * 10;
CPoint start(centerX + offsetX, centerY + offsetY); // 垂直线的起点坐标
CPoint end(centerX - offsetX, centerY - offsetY); // 垂直线的终点坐标
```
其中,`start`和`end`就是垂直线段的起点和终点坐标。
阅读全文