c++ 已知两点坐标,获取该线段的90度垂直线段坐标
时间: 2023-10-25 07:07:54 浏览: 128
c++求两条线段的交点坐标
3星 · 编辑精心推荐
如果要获取两点坐标确定的线段的90度垂直线段坐标,可以按照以下步骤进行:
1. 计算线段的中点坐标:
```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); // 中心点坐标
```
2. 计算线段的方向向量:
```c++
float dx = p2.x - p1.x;
float dy = p2.y - p1.y;
float length = sqrt(dx * dx + dy * dy); // 线段长度
dx /= length; // 归一化向量
dy /= length;
```
3. 计算线段的垂直方向向量:
```c++
float offsetX = -dy;
float offsetY = dx;
```
4. 计算垂直线段的两个端点坐标:
```c++
float halfLength = length / 2; // 垂直线段的长度为原线段长度的一半
CPoint start(centerX + offsetX * halfLength, centerY + offsetY * halfLength);
CPoint end(centerX - offsetX * halfLength, centerY - offsetY * halfLength);
```
完整代码如下:
```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;
float offsetY = dx;
float halfLength = length / 2; // 垂直线段的长度为原线段长度的一半
CPoint start(centerX + offsetX * halfLength, centerY + offsetY * halfLength);
CPoint end(centerX - offsetX * halfLength, centerY - offsetY * halfLength);
```
其中,`start`和`end`就是垂直线段的两个端点坐标。
阅读全文