计算两个点的中心点 c++代码
时间: 2023-07-27 22:07:21 浏览: 158
假设两个点分别为 (x1, y1) 和 (x2, y2),它们的中心点为 ((x1 + x2) / 2, (y1 + y2) / 2),可以用如下的 C++ 代码实现:
```c++
#include <iostream>
using namespace std;
struct Point {
int x, y;
};
Point getCenter(Point p1, Point p2) {
Point center;
center.x = (p1.x + p2.x) / 2;
center.y = (p1.y + p2.y) / 2;
return center;
}
int main() {
Point p1 = {1, 2};
Point p2 = {3, 4};
Point center = getCenter(p1, p2);
cout << "Center: (" << center.x << ", " << center.y << ")" << endl;
return 0;
}
```
这里使用了一个自定义的 Point 结构体来表示点,getCenter 函数接受两个 Point 类型的参数,返回一个新的 Point 类型表示两个点的中心点。在主函数中我们可以自己定义两个点,然后调用 getCenter 函数来计算它们的中心点,并输出结果。
相关问题
线段两个点为中心线 计算矩形
如果已知线段的两个端点 $P_1$ 和 $P_2$,我们可以沿着这条线段找到两个点,使得这两个点与线段构成的矩形包含原点。具体而言,可以按照以下步骤计算矩形的四个顶点:
1. 计算线段中心点 $C = \frac{P_1 + P_2}{2}$ 和单位向量 $\hat{u} = \frac{P_2 - P_1}{\|P_2 - P_1\|}$。
2. 将单位向量 $\hat{u}$ 顺时针旋转 $90^\circ$ 得到垂直向量 $\hat{v} = (-\hat{u}_y, \hat{u}_x)$。
3. 分别将垂直向量 $\hat{v}$ 和 $-\hat{v}$ 缩放得到两个向量 $k_1 \hat{v}$ 和 $k_2 (-\hat{v})$,其中 $k_1$ 和 $k_2$ 是你想要的矩形的大小。
4. 将缩放后的向量加到中心点上得到四个顶点 $P_1' = C + k_1 \hat{v}$,$P_2' = C - k_2 \hat{v}$,$P_3' = C - k_1 \hat{v}$ 和 $P_4' = C + k_2 \hat{v}$。
需要注意的是,如果 $P_1$ 和 $P_2$ 之间的距离小于两倍的矩形大小,那么矩形无法包含原点,此时可以选择增加矩形大小或者选择其他的线段。
以下是一个 C++ 的示例代码,可以计算线段的矩形:
```c++
#include <iostream>
#include <cmath>
using namespace std;
struct Point {
double x, y;
};
struct Segment {
Point p1, p2;
};
// 计算两点之间的距离
double distance(Point p1, Point p2) {
return sqrt(pow(p1.x-p2.x, 2) + pow(p1.y-p2.y, 2));
}
// 计算线段的矩形
Segment computeRectangle(Segment s, double k1, double k2) {
// 计算线段中心点和单位向量
Point center = {(s.p1.x+s.p2.x)/2, (s.p1.y+s.p2.y)/2};
double length = distance(s.p1, s.p2);
Point unitVec = {(s.p2.x-s.p1.x)/length, (s.p2.y-s.p1.y)/length};
// 计算垂直向量
Point vertVec = {-unitVec.y, unitVec.x};
// 缩放垂直向量并加到中心点上得到新的顶点
Point p1p = {center.x+k1*vertVec.x, center.y+k1*vertVec.y};
Point p2p = {center.x-k2*vertVec.x, center.y-k2*vertVec.y};
Point p3p = {center.x-k1*vertVec.x, center.y-k1*vertVec.y};
Point p4p = {center.x+k2*vertVec.x, center.y+k2*vertVec.y};
// 检查矩形是否包含原点
if (distance(p1p, {0, 0}) < k1*2 && distance(p2p, {0, 0}) < k2*2) {
return {p1p, p2p};
} else {
// 无法包含原点,返回空线段
return {{0, 0}, {0, 0}};
}
}
int main() {
Segment s = {{-3,-2}, {3,4}};
double k1 = 2;
double k2 = 3;
Segment rectangle = computeRectangle(s, k1, k2);
cout << "Rectangle: [(" << rectangle.p1.x << "," << rectangle.p1.y << "), (" << rectangle.p2.x << "," << rectangle.p2.y << ")]" << endl;
return 0;
}
```
注意,上述代码中使用了结构体 `Point` 和 `Segment` 表示点和线段,可以根据实际情况自行定义。
矩形四个点如何计算矩形的角度 c++代码
以下是使用C++代码实现计算矩形角度的示例:
```
#include <iostream>
#include <math.h>
using namespace std;
// 定义点的结构体
struct Point {
double x;
double y;
};
// 计算矩形角度的函数
double calcAngle(Point p1, Point p2) {
double angle = atan2(p2.y - p1.y, p2.x - p1.x) * 180 / M_PI;
return angle;
}
int main() {
// 定义矩形四个点的坐标
Point p1 = {1, 1};
Point p2 = {3, 1};
Point p3 = {3, 4};
Point p4 = {1, 4};
// 计算矩形的中心点坐标
double centerX = (p1.x + p2.x + p3.x + p4.x) / 4;
double centerY = (p1.y + p2.y + p3.y + p4.y) / 4;
Point center = {centerX, centerY};
// 计算矩形的长边
double len1 = sqrt(pow(p2.x - p1.x, 2) + pow(p2.y - p1.y, 2));
double len2 = sqrt(pow(p3.x - p2.x, 2) + pow(p3.y - p2.y, 2));
double len3 = sqrt(pow(p4.x - p3.x, 2) + pow(p4.y - p3.y, 2));
double len4 = sqrt(pow(p1.x - p4.x, 2) + pow(p1.y - p4.y, 2));
double maxLen = max(max(len1, len2), max(len3, len4));
// 找出长边所对应的两个点
Point pLong1, pLong2;
if (maxLen == len1) {
pLong1 = p1;
pLong2 = p2;
} else if (maxLen == len2) {
pLong1 = p2;
pLong2 = p3;
} else if (maxLen == len3) {
pLong1 = p3;
pLong2 = p4;
} else if (maxLen == len4) {
pLong1 = p4;
pLong2 = p1;
}
// 计算矩形的角度
double angle = calcAngle(pLong1, pLong2);
cout << "矩形的角度为:" << angle << endl;
return 0;
}
```
在代码中,我们首先定义了一个 `Point` 结构体,用来表示点的坐标。然后,我们使用四个 `Point` 类型的变量来表示矩形的四个点,计算出矩形的中心点坐标和长边长度,找出长边对应的两个点,最后调用 `calcAngle()` 函数计算矩形的角度。