写一段c++代码,能够获取正十一边形的每个顶点,这个形状的外接圆半径为200,圆心为300,300,把顶点存入vector中
时间: 2024-10-09 17:01:38 浏览: 24
由三点三维坐标计算圆半径和圆心位置
在C++中,计算正十一边形的顶点需要一些数学知识,特别是角度计算和距离公式。这里我们可以利用三角函数和正弦定律来确定每个顶点。首先,我们定义一个辅助函数来计算从圆心到边上的点的距离,然后再创建一个`ElevenSidedPolygon`类来存储顶点。
```cpp
#include <iostream>
#include <cmath>
#include <vector>
// 辅助函数,计算从圆心到边上的点的距离
double distanceFromCenter(double centerX, double centerY, double radius, double angleInDegrees) {
double radians = angleInDegrees * M_PI / 180.0; // 转换为弧度
double dx = radius * cos(radians);
double dy = radius * sin(radians);
return sqrt(dx * dx + dy * dy); // 使用勾股定理
}
class ElevenSidedPolygon {
private:
double center_x;
double center_y;
double radius;
std::vector<std::pair<double, double>> vertices;
public:
ElevenSidedPolygon(double center_x, double center_y, double radius)
: center_x(center_x), center_y(center_y), radius(radius) {}
// 计算并添加十一边形顶点到vector
void generateVertices() {
double angleStep = 2 * M_PI / 11.0; // 十一边形的每条边的角度差
for (int i = 0; i <= 10; ++i) {
double currentAngle = angleStep * i;
double x = center_x + radius * cos(currentAngle);
double y = center_y + radius * sin(currentAngle);
vertices.push_back(std::make_pair(x, y));
}
}
std::vector<std::pair<double, double>>& getVertices() {
if (vertices.empty()) {
generateVertices();
}
return vertices;
}
};
int main() {
double center_x = 300;
double center_y = 300;
double radius = 200;
ElevenSidedPolygon polygon(center_x, center_y, radius);
// 打印顶点
for (const auto& vertex : polygon.getVertices()) {
std::cout << "(" << vertex.first << ", " << vertex.second << ")" << std::endl;
}
return 0;
}
```
在这个代码中,我们首先初始化了一个`ElevenSidedPolygon`对象,然后调用`generateVertices`方法计算并存储各个顶点。注意,顶点按照逆时针方向生成。
阅读全文