MFC怎么判断两点之间的距离
时间: 2023-09-25 11:13:20 浏览: 197
在 MFC 中,可以使用 CPoint 类来表示一个点,其中包括该点的 x 和 y 坐标。如果要计算两个点之间的距离,可以使用以下公式:
distance = sqrt((x2-x1)*(x2-x1) + (y2-y1)*(y2-y1))
其中,(x1, y1) 和 (x2, y2) 分别表示两个点的坐标,sqrt 表示求平方根,distance 表示两个点之间的距离。在 MFC 中,可以使用 CPoint 类的成员函数来获取一个点的坐标,然后再使用上述公式计算两个点之间的距离。具体代码可以参考下面的示例:
```c++
CPoint pt1(10, 20); // 定义第一个点
CPoint pt2(30, 40); // 定义第二个点
// 计算两个点之间的距离
double distance = sqrt((pt2.x-pt1.x)*(pt2.x-pt1.x) + (pt2.y-pt1.y)*(pt2.y-pt1.y));
```
这样,distance 变量就保存了两个点之间的距离。
相关问题
mfc 已知两点 求长度为30的中垂线两点坐标
这个问题需要更多的信息才能完全解决。需要知道已知的两个点的坐标才能计算出它们之间的距离和中点的坐标。然后,以中点为圆心,长度为30为半径,可以画出一个圆,中垂线将与圆相交于两个点,这些点将是中垂线的端点。
以下是一个简单的示例代码,假设已知点A(x1, y1)和点B(x2, y2):
```c++
double x_mid = (x1 + x2) / 2.0;
double y_mid = (y1 + y2) / 2.0;
double d = sqrt((x2-x1)*(x2-x1) + (y2-y1)*(y2-y1));
double r = 15.0; // 半径为30的一半
double dx = (x2-x1)/d;
double dy = (y2-y1)/d;
double x1_new = x_mid + r*dy;
double y1_new = y_mid - r*dx;
double x2_new = x_mid - r*dy;
double y2_new = y_mid + r*dx;
```
其中,(x1_new, y1_new)和(x2_new, y2_new)就是中垂线的两个端点的坐标。
需要注意的是,这只是一个简单的示例,实际应用中可能需要考虑更多的因素,如坐标系的选择、精度等等。
mfc 绘制两点连接的线段垂直线段
您可以通过以下步骤来绘制两点连接的线段垂直线段:
1. 首先,计算出两点之间的距离和中心点坐标。
```c++
CPoint p1, p2; // 两点坐标
float distance = sqrt(pow(p1.x - p2.x, 2) + pow(p1.y - p2.y, 2)); // 两点距离
CPoint center((p1.x + p2.x) / 2, (p1.y + p2.y) / 2); // 中心点坐标
```
2. 然后,计算出垂直线的起点和终点坐标。
```c++
float dx = (p2.x - p1.x) / distance; // 两点连线的方向向量
float dy = (p2.y - p1.y) / distance;
float offsetX = -dy * 10; // 偏移量(这里取10,可以根据需要调整)
float offsetY = dx * 10;
CPoint start(center.x + offsetX, center.y + offsetY); // 垂直线的起点坐标
CPoint end(center.x - offsetX, center.y - offsetY); // 垂直线的终点坐标
```
3. 最后,使用CDC的LineTo方法绘制线段。
```c++
CDC* pDC = GetDC();
pDC->MoveTo(start);
pDC->LineTo(end);
ReleaseDC(pDC);
```
完整代码如下:
```c++
CPoint p1(100, 100); // 两点坐标
CPoint p2(200, 200);
float distance = sqrt(pow(p1.x - p2.x, 2) + pow(p1.y - p2.y, 2)); // 两点距离
CPoint center((p1.x + p2.x) / 2, (p1.y + p2.y) / 2); // 中心点坐标
float dx = (p2.x - p1.x) / distance; // 两点连线的方向向量
float dy = (p2.y - p1.y) / distance;
float offsetX = -dy * 10; // 偏移量(这里取10,可以根据需要调整)
float offsetY = dx * 10;
CPoint start(center.x + offsetX, center.y + offsetY); // 垂直线的起点坐标
CPoint end(center.x - offsetX, center.y - offsetY); // 垂直线的终点坐标
CDC* pDC = GetDC();
pDC->MoveTo(start);
pDC->LineTo(end);
ReleaseDC(pDC);
```