优秀的编程知识分享平台

网站首页 > 技术文章 正文

用C++绘制三角形内切圆的圆心和半径的计算

nanyue 2024-08-19 19:10:34 技术文章 7 ℃

使用C++实现给定三个点坐标的三角形内切圆的圆心和半径的计算,并使用EasyX库进行绘制,可以参考以下步骤:

1. 定义一个`Point`结构来表示二维空间中的点。

2. 计算三角形边长。

3. 使用海伦公式计算三角形面积。

4. 利用内切圆半径公式计算半径。

5. 利用内切圆圆心公式计算圆心坐标。

6. 使用EasyX库函数绘制三角形的顶点、内切圆。

下面是具体的C++实现代码:

```cpp

#include

#include

#include

struct Point {

double x, y;

};

// 计算两点之间的距离

double distance(const Point& p1, const Point& p2) {

return sqrt((p2.x - p1.x) * (p2.x - p1.x) + (p2.y - p1.y) * (p2.y - p1.y));

}

// 使用海伦公式计算三角形面积

double triangleArea(const Point& A, const Point& B, const Point& C) {

double a = distance(B, C);

double b = distance(C, A);

double c = distance(A, B);

double s = (a + b + c) / 2;

return sqrt(s * (s - a) * (s - b) * (s - c));

}

// 计算内切圆半径

double inradius(const Point& A, const Point& B, const Point& C) {

double area = triangleArea(A, B, C);

double semiPerimeter = distance(A, B) + distance(B, C) + distance(C, A);

return (2 * area) / semiPerimeter;

}

// 计算内切圆圆心坐标

Point incenter(const Point& A, const Point& B, const Point& C) {

double a = distance(B, C);

double b = distance(C, A);

double c = distance(A, B);

double u = (b * b + c * c - a * a) / (2 * a);

double v = (a * a + c * c - b * b) / (2 * b);

double w = (a * a + b * b - c * c) / (2 * c);

return {A.x + u * (C.x - B.x), A.y + u * (C.y - B.y)};

}

int main() {

initgraph(800, 600); // 初始化图形窗口

Point A = {100, 200};

Point B = {300, 300};

Point C = {200, 100};

// 计算内切圆半径和圆心

double r = inradius(A, B, C);

Point I = incenter(A, B, C);

// 绘制三角形的顶点

circle(A.x, A.y, 5);

circle(B.x, B.y, 5);

circle(C.x, C.y, 5);

// 绘制内切圆

circle(I.x, I.y, r);

// 绘制三角形的边

line(A.x, A.y, B.x, B.y);

line(B.x, B.y, C.x, C.y);

line(C.x, C.y, A.x, A.y);

// 等待用户按键

getch();

closegraph(); // 关闭图形窗口

return 0;

}

```

请注意,这段代码使用了EasyX图形库,因此你需要在支持该库的环境中编译和运行。代码中的`initgraph`函数用于初始化图形窗口,`circle`函数用于绘制点和圆,`line`函数用于绘制线段,`getch`函数用于暂停程序等待用户按键。

在实际使用中,你可能需要根据实际情况调整`initgraph`函数的参数,以确保图形窗口正确显示。此外,`incenter`函数的计算方法可能需要根据具体的数学推导进行调整。上述代码提供了一个基本的框架,你可以根据需要进行修改和扩展。

Tags:

最近发表
标签列表