C语言平面几何19-三角形的重心和垂心

三角形的重心:三角形三条中线的交点。该交点到顶点的距离是到对边中点距离的2倍。

三角形的垂心:三角形三条高的交点。

/* 三角形的重心 */
Point BaryCenter(Triangle t)
{
	// 三条中线的交点
	Point m = MiddlePoint(t.B, t.C);
	Line l1 = LineMake(t.A, m);
	
	Point n = MiddlePoint(t.A, t.B);
	Line l2 = LineMake(t.C, n);
	
	int flag;
	return LinesIntersection(l1, l2, &flag);
}

/* 三角形的垂心 */
Point OrthoCenter(Triangle t)
{
	Line a = LineMake(t.B, t.C);
	Line b = LineMake(t.A, t.C);
	
	// 垂点
	Point m = VerticalPoint(t.A, a);
	Point n = VerticalPoint(t.B, b);
	
	Line l1 = LineMake(t.A, m);
	Line l2 = LineMake(t.B, n);
	
	int flag;
	return LinesIntersection(l1, l2, &flag);
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我会尽我所能回答你的问题。 对于这个任务,我们可以定义一个基类 Triangle,并在其内部定义虚函数来完成面积计算、三角形类型判断、重心、外、内计算,以及点和三角形的关系判断。此外,我们还可以定义一个纯虚函数来计算直线和三角形的交点。 具体实现如下: ```c++ class Triangle { public: virtual double getArea() = 0; virtual string getType() = 0; virtual Point getCentroid() = 0; virtual Point getOrthocenter() = 0; virtual Point getCircumcenter() = 0; virtual Point getIncenter() = 0; virtual string getPointRelation(Point p) = 0; virtual vector<Point> getIntersection(Line l) = 0; protected: Point a, b, c; }; class AcuteTriangle : public Triangle { public: AcuteTriangle(Point _a, Point _b, Point _c) { a = _a, b = _b, c = _c; } double getArea() { // 计算面积 } string getType() { // 判断三角形类型 } Point getCentroid() { // 计算重心 } Point getOrthocenter() { // 计算 } Point getCircumcenter() { // 计算外 } Point getIncenter() { // 计算内 } string getPointRelation(Point p) { // 判断点和三角形的关系 } vector<Point> getIntersection(Line l) { // 计算直线和三角形的交点 } }; class RightTriangle : public Triangle { public: RightTriangle(Point _a, Point _b, Point _c) { a = _a, b = _b, c = _c; } double getArea() { // 计算面积 } string getType() { // 判断三角形类型 } Point getCentroid() { // 计算重心 } Point getOrthocenter() { // 计算 } Point getCircumcenter() { // 计算外 } Point getIncenter() { // 计算内 } string getPointRelation(Point p) { // 判断点和三角形的关系 } vector<Point> getIntersection(Line l) { // 计算直线和三角形的交点 } }; class ObtuseTriangle : public Triangle { public: ObtuseTriangle(Point _a, Point _b, Point _c) { a = _a, b = _b, c = _c; } double getArea() { // 计算面积 } string getType() { // 判断三角形类型 } Point getCentroid() { // 计算重心 } Point getOrthocenter() { // 计算 } Point getCircumcenter() { // 计算外 } Point getIncenter() { // 计算内 } string getPointRelation(Point p) { // 判断点和三角形的关系 } vector<Point> getIntersection(Line l) { // 计算直线和三角形的交点 } }; ``` 其中,我们定义了三个派生类 AcuteTriangle、RightTriangle 和 ObtuseTriangle,分别表示锐角三角形、直角三角形和钝角三角形。这些派生类都继承了 Triangle 的虚函数,并且根据其自身特点进行了实现。 在实际使用时,我们可以根据给定的三个点构造出一个 Triangle 对象,并调用其相应的虚函数来完成任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值