main.h
#pragma once
#include
#include
double i[6] = {};
using namespace std;
void Input(double* pa);
void Check(double*pa);
double Aera(double a,double b,double c);
double a;
double b;
double c;
double x1, x2, x3,d,e,f;
main.cpp
#include"main.h"
int main()
{
double* pa = i;
Input(pa);
Check(pa);
cout<<"所求面积为"<<Aera(a, b, c)<<endl;
return 0;
}
void Input(double *pa)
{
cout << "请输入第一个点的坐标:";
cin >> x1 >> d;
cout << "请输入第二个点的坐标:";
cin >> x2 >> e;
cout << "请输入第三个点的坐标:";
cin >> x3 >> f;
*pa = x1;
*( pa + 1) = d;
*(pa + 2) = x2;
*(pa + 3) = e;
*(pa + 4) = x3;
*(pa + 5) = f;
}
void Check(double *pa)
{
c = sqrt((i[0] - i[2]) * (i[0] - i[2]) + (i[1] - i[3]) * (i[1] - i[3]));
b = sqrt((i[2] - i[4]) * (i[2] - i[4]) + (i[3] - i[5]) * (i[3] - i[5]));
a = sqrt((i[0] - i[4]) * (i[0] - i[4]) + (i[1] - i[5]) * (i[1] - i[5]));
if ((a + b > c) && (a + c > b) && (b + c > a)) cout << "能";
else cout << "不能";
}
double Aera(double a, double b, double c)
{
double p;
double s;
p = (1.0 / 2.0) * (a + b + c);
s = sqrt(p * (p - a) * (p - b) * (p - c));
return (s);
}
#include <iostream>
#include <cmath>
class Point
{
public:
Point() = default;
Point(double x, double y) : _x(x), _y(y) {}
double x() const { return _x; }
double y() const { return _y; }
void setX(double x) { _x = x; };
void setY(double y) { _y = y; }
private:
double _x = 0.0;
double _y = 0.0;
};
std::istream &operator>>(std::istream &is, Point &p)
{
double x = 0.0;
double y = 0.0;
is >> x >> y;
p.setX(x);
p.setY(y);
return is;
}
std::ostream &operator<<(std::ostream &os, const Point &p)
{
os << '(' << p.x() << ',' << p.y() << ')';
return os;
}
double distance(const Point &p1, const Point &p2)
{
double dx = p2.x() - p1.x();
double dy = p2.y() - p1.y();
return std::sqrt(dx * dx + dy * dy);
}
class Triangle
{
public:
Triangle() = default;
Triangle(const Point &pt1, const Point &pt2, const Point &pt3) : _pt1(pt1), _pt2(pt2), _pt3(pt3) {}
const Point &pt1() const { return _pt1; }
const Point &pt2() const { return _pt2; }
const Point &pt3() const { return _pt3; }
bool isValid() const
{
double a = distance(_pt1, _pt2);
double b = distance(_pt2, _pt3);
double c = distance(_pt3, _pt1);
return (a + b) > c && (b + c) > a && (c + a) > b;
}
double area() const
{
double a = distance(_pt1, _pt2);
double b = distance(_pt2, _pt3);
double c = distance(_pt3, _pt1);
double s = (a + b + c) / 2.0;
return std::sqrt(s * (s - a) * (s - b) * (s - c));
}
private:
Point _pt1;
Point _pt2;
Point _pt3;
};
std::ostream &operator<<(std::ostream &os, const Triangle &triangle)
{
os << '{' << triangle.pt1() << ',' << triangle.pt2() << ',' << triangle.pt3() << '}';
return os;
}
int main()
{
Point pt1, pt2, pt3;
std::cout << "Input Point 1: ";
std::cin >> pt1;
std::cout << "Input Point 2: ";
std::cin >> pt2;
std::cout << "Input Point 3: ";
std::cin >> pt3;
Triangle triangle(pt1, pt2, pt3);
if (!triangle.isValid())
std::cout << "The triangle " << triangle << " is not valid.\n";
else
std::cout << "The area of the triangle " << triangle << " is " << triangle.area() << '\n';
return 0;
}