编写一个程序,求三角形的周长与面积。要求:输入的是一个文件,文件的每一行是三角形三个顶点的坐标。编写一个函数求两点之间的距离;一个函数求三角形的周长; 一个函数求三角形的面积。
时间: 2024-12-15 08:20:09 浏览: 1
要编写这个程序,你需要首先定义两个辅助函数:一个用于计算两点之间的欧氏距离(Euclidean distance),另一个用于判断三个点是否构成有效的三角形。然后你可以创建一个主函数来读取文件中的数据,调用这些辅助函数计算周长和面积。
这里是程序的基本结构:
```cpp
#include <iostream>
#include <fstream>
#include <cmath> // 引入数学库,使用sqrt()函数
// 辅助函数:计算两点间距离
double distance(double x1, double y1, double x2, double y2) {
return std::sqrt(std::pow(x2 - x1, 2) + std::pow(y2 - y1, 2));
}
// 判断三点是否构成有效的三角形
bool is_valid_triangle(const std::vector<double>& points) {
if (points.size() != 3) {
return false;
}
double a = distance(points[0], points[1], points[2]);
double b = distance(points[1], points[2], points[0]);
double c = distance(points[2], points[0], points[1]);
return a + b > c && a + c > b && b + c > a;
}
// 辅助函数:计算三角形周长
double triangle_perimeter(const std::vector<double>& points) {
if (!is_valid_triangle(points)) {
throw std::runtime_error("Invalid triangle");
}
return a + b + c; // 假设a, b, c为三角形边长
}
// 辅助函数:计算三角形面积(海伦公式)
double triangle_area(const std::vector<double>& points) {
if (!is_valid_triangle(points)) {
throw std::runtime_error("Invalid triangle");
}
double s = (a + b + c) / 2.0; // 半周长
return std::sqrt(s * (s - a) * (s - b) * (s - c));
}
int main() {
std::ifstream inputFile("triangle_data.txt"); // 假设文件名为triangle_data.txt
if (!inputFile.is_open()) {
std::cerr << "Failed to open the file." << std::endl;
return 1;
}
double x1, y1, x2, y2, x3, y3;
while (inputFile >> x1 >> y1 >> x2 >> y2 >> x3 >> y3) {
std::vector<double> triangle({x1, y1, x2, y2, x3, y3}); // 将三个点存储在一个向量里
double perimeter = triangle_perimeter(triangle);
double area = triangle_area(triangle);
std::cout << "Triangle with vertices (" << x1 << ", " << y1 << "), (" << x2 << ", " << y2 << "), (" << x3 << ", " << y3 << "):" << std::endl;
std::cout << "Perimeter: " << perimeter << std::endl;
std::cout << "Area: " << area << std::endl;
std::cout << std::endl;
}
inputFile.close();
return 0;
}
```
在这个程序中,你需要确保`triangle_data.txt`文件存在并且格式正确,每行包含三个顶点的坐标,例如:"0 0 5 5 10 10"。
阅读全文