《算法设计》课程报告--三角形问题

合集下载

三角形算法

三角形算法

三角形算法引言三角形是几何学中的基本图形之一,具有广泛的应用。

在计算机图形学、游戏开发、物理模拟等领域,三角形算法被广泛使用。

本文将介绍常用的三角形算法及其原理,包括点的位置关系判断、边的相交检测、面的剔除等内容。

三角形的表示方法在计算机中,我们通常使用三个顶点的坐标来表示一个三角形。

以二维坐标系为例,假设一个三角形的三个顶点分别为A(x1, y1), B(x2, y2)和C(x3, y3),可以用以下方法表示:三角形ABC:A = (x1, y1)B = (x2, y2)C = (x3, y3)在三维空间中,我们可以使用类似的方式表示三角形的三个顶点的坐标。

点的位置关系判断判断一个点在三角形内部、外部还是边上是很常见的问题。

常用的方法有以下几种:1. 点在三角形内部判断方法一个点P(x, y)在三角形ABC内部的条件是:点P在三个边AB、BC和CA的同一侧。

假设三角形ABC按顺时针方向排列,点P在三边的右侧,则点P在三角形内部。

2. 点在三角形外部判断方法一个点P(x, y)在三角形ABC外部的条件是:点P在三个边AB、BC和CA的两侧。

假设三角形ABC按顺时针方向排列,点P在三边的同一侧,则点P在三角形外部。

3. 点在三角形边上判断方法一个点P(x, y)在三角形ABC边上的条件是:点P在三边AB、BC或CA上。

边的相交检测在计算机图形学中,判断两条边是否相交是一个常见的问题。

常用的方法有以下几种:1. 检测两条线段是否相交给定两条线段AB和CD,我们可以通过计算两条线段的参数方程,即求解线段AB和线段CD的交点,来判断两条线段是否相交。

2. 检测线段与直线的相交给定一条线段AB和一条直线CD,我们可以通过计算线段AB和直线CD的交点,来判断线段和直线是否相交。

3. 检测多边形边的相交给定一个多边形,我们可以通过遍历多边形的所有边,判断每一条边是否与其他边相交,来判断多边形的边是否相交。

面的剔除在计算机图形学中,三角形的面剔除是一种优化技术,用于减少不可见的三角形的绘制次数,从而提高渲染性能。

C程序设计实验报告(三角形)

C程序设计实验报告(三角形)
先判断是否为三角形再判断是否为等边等腰或直角三角形否则为一般三角形
C程序设计实验报告(三角形)
一、实验题目:判断三角形
二、实验内容(问题描述)
输入三角形的三个边长判断出由这三条边组成的三角形的类型。
三、主要思路(分析过程、算法)
先判断是否为三角形,再判断是否为等边,等腰或直角三角形,否则为一般三角形。
四、核心代码(关键程序段)
#include <stdio.h>
#include <math.h>
#define EPS 1e-1
main()
{
float a,b,c; int flag=1; printf(&uot请输入 a,b,c:&uot); scanf(&uot%f,%f,%f&uot,&a,&b,&c); if(a+b>c&&b+c>a&&a+c>b) { if(fabs(a-b)<=EPS&&fabs(b-c)<=EPS&&fabs(c-a)<=EPS) { }

三角形问题- 等价类法(实验报告)2011-9-27

三角形问题- 等价类法(实验报告)2011-9-27

一、实验环境Visual C++ 6.0软件环境二、实验原理软件测试是通过运行所开发的软件产品,识别和控制软件缺陷,以验证和确认用户需求已得到满足的过程。

三、给出三角形等价类表和测试用例表?三角形问题:输入三个整数a、b、c分别作为三角形的三条边,现通过程序判断由三条边构成的三角形的类型为等边三角形、等腰三角形、一般三角形(特殊的还有直角三角形)以及构不成三角形。

现在要求输入三个整数a、b、c,必须满足以下条件:条件1 1≤a≤100 条件4 a≤b+c条件2 1≤b≤100 条件5 b≤a+c条件3 1≤c≤100 条件6 c≤a+b解:(开发程序清单)#include <iostream.h>int i = 0;void main(void){while(i==0){int a,b,c;cout<<"请输入3个整数:"<<endl;cin>>a>>b>>c;if(!(a+b<=c||a+c<=b|| b+c<=a)&&(a>=1&&a<=100)&&(b>=1&&b<=100)&&(c>=1&&c<=100)) {if (a==b && a==c) cout<<"等边三角形"<<endl;else if (a==b || a==c || b==c) cout<<"等腰三角形"<<endl;else cout<<"一般三角形"<<endl;}else {if(a<1||a>100) cout<<"a="<<a<<"不满足条件1,不能构成三角形"<<endl;else if(b<1||b>100) cout<<"b="<<b<<"不满足条件2,不能构成三角形"<<endl;else if(c<1||c>100) cout<<"c="<<c<<"不满足条件3,不能构成三角形"<<endl;else if(a>=b+c) cout<<"不满足a<b+c,不能构成三角形"<<endl;else if(b>=a+c) cout<<"不满足b<a+c,不能构成三角形"<<endl;else if(c>=b+a) cout<<"不满足c<a+b,不能构成三角形"<<endl;}}}四、测试用例等价类表测试用例表五、测试结果六、心得体会这次实验题目是三角形问题,其实用C++编程并不难,因为以前都做过,主要是测试。

c++课程设计之三角形的种类和面积

c++课程设计之三角形的种类和面积

《C++程序设计》课程设计报告三角形的种类和面积班级: ___ 姓名学号: _______________ 指导教师: ___ 完成时间: 2010 年 9 月 30 日目录摘要 (3)一、引言 (1)二、设计目的与任务 (1)1、本课程设计的目的 (1)2、本课程设计的任务 (2)三、设计方案 (2)四、程序清单 (5)五、程序调试与体会 (13)六、总结 (22)摘要本次设计用类进行有关三角形的种类和面积的操作。

通过类的继承与派生,调用类的成员函数实现判别三角形的种类,求三角形三条边的长度,求三角形的面积,数据存入文件,查看文件数据,清空数据文件等操作。

程序中使用了类的继承,提高代码的复用性。

程序主要由点类、线段类、三角形类以及主函数构成。

关键字:类、类的继承与派生AbstractThe design of the triangle is concerned with the type and area. By inheriting classes derived, and members of the function calls for the triangle, criterion the length of the triangle, the triangle area, data files, check the file data into empty data files, etc. In the process of using the inheritance, enhance code reusability. Program mainly by point, line, and the main function of triangles.Key words: class, the class inherits and derivatives《C++程序设计语言》课程设计——利用类的继承与派生求三角形的种类和面积一、引言随着人们生活水平的提高,计算机发展异常迅速。

解三角形图形类问题

解三角形图形类问题

解三角形图形类问题三角形是几何学中的基本形状之一,它有着丰富的性质和特点。

解三角形图形类问题是数学学习中的重要内容之一。

本文将通过实例来解释和探讨不同类型的三角形图形问题,并给出相应的解决方法。

一、等边三角形问题等边三角形是一种特殊的三角形,它的三边长度相等,三个角也都是60度。

求解等边三角形问题需要考虑到等边三角形的性质以及利用相应的公式进行计算。

实例1:已知等边三角形的周长是18cm,求其面积。

解:设等边三角形的边长为a,则根据周长的定义,有3a=18cm,解得a=6cm。

等边三角形的面积公式为S=(√3/4)a²,带入边长a=6cm,即可计算得到三角形的面积S=9√3 cm²。

二、直角三角形问题直角三角形是一种至少有一个直角的三角形,其特点是其中一边的平方等于另外两边平方的和。

求解直角三角形问题通常包括求解三角形的边长、角度、面积等。

实例2:已知直角三角形的直角边长分别为3cm和4cm,求其斜边的长度。

解:根据直角三角形的性质,设斜边长度为c,根据勾股定理,有a²+b²=c²。

代入已知的直角边长,得到3²+4²=c²,解得c=5cm。

因此,直角三角形的斜边长度为5cm。

三、等腰三角形问题等腰三角形是一种至少有两边长度相等的三角形,其特点是两个底角也相等。

求解等腰三角形问题常常需要考虑到等腰三角形的性质和相关定理。

实例3:已知等腰三角形的顶角为30度,底边长度为8cm,求其周长和面积。

解:设等腰三角形的腰长为a,根据等腰三角形的性质,有顶角的度数等于底角的度数,所以底角度数为30度。

根据三角形角度和的性质,可以得到腰角的度数为(180-30)/2=75度。

根据正弦定理,可以得到a/√3=sin75°/sin30°。

通过计算,得到a≈6.93cm。

因此,等腰三角形的周长等于2a+8=21.86cm,面积等于(1/2)×8×6.93=27.72cm²。

c语言求三角形面积实验报告

c语言求三角形面积实验报告

c语言求三角形面积实验报告C语言求三角形面积实验报告一、引言三角形是几何中的基本形状之一,求解其面积是几何学中的重要问题之一。

本实验通过使用C语言编程,实现求解三角形面积的算法,并进行了验证和性能分析。

二、实验目的1. 学习C语言的基本语法和控制结构;2. 掌握求解三角形面积的算法;3. 熟悉编程与实验的结合,提升解决问题的能力。

三、实验原理三角形的面积可以通过海伦公式或矢量法进行求解。

本实验采用海伦公式求解三角形面积。

四、实验方法1. 设置三角形的三个顶点坐标,以及边长变量;2. 根据海伦公式,计算三角形的半周长;3. 根据半周长和边长计算三角形面积;4. 输出计算结果。

五、实验步骤1. 定义并初始化三角形的三个顶点坐标和边长变量;2. 计算三角形的半周长:`(a + b + c) / 2`;3. 计算三角形的面积:`sqrt(s * (s - a) * (s - b) * (s - c))`,其中`s`为半周长;4. 输出三角形的面积结果。

六、实验代码```c#include <stdio.h>#include <math.h>int main() {double x1, y1, x2, y2, x3, y3;double a, b, c; // 三边长double s; // 半周长double area; // 三角形面积printf("请输入三角形的顶点坐标(x1, y1, x2, y2, x3, y3):");scanf("%lf %lf %lf %lf %lf %lf", &x1, &y1, &x2, &y2, &x3, &y3);a = sqrt(pow(x1 - x2, 2) + pow(y1 - y2, 2));b = sqrt(pow(x1 - x3, 2) + pow(y1 - y3, 2));c = sqrt(pow(x2 - x3, 2) + pow(y2 - y3, 2));s = (a + b + c) / 2;area = sqrt(s * (s - a) * (s - b) * (s - c));printf("三角形的面积为:%lf\n", area);return 0;}```七、实验结果输入三角形的三个顶点坐标:(0, 0), (0, 3), (4, 0)计算结果为:6.000000八、实验总结通过本次实验,我学习了C语言的基本语法和控制结构,掌握了求解三角形面积的算法,并通过编程实现了该算法。

三角形实验报告

三角形实验报告

例30:输入3个数据,判断以它们为边长是否能构成三角形。

如果能构成,则判断属于哪种特殊三角形:等边、等腰或直角。

分析:题目很简单,关键是做到合理输出。

进行合理判断顺序,以便执行较少的判断条件,得到最终的判断结果。

流程图如下:代码:三角形.cpp运行结果:8、判断s字符串是否为回文的递归函数。

思路:将字符串保存成数组或者链表,将第一个和最后一个元素比较,第二个元素和倒数第二个元素比较,依此类推。

只要有一个不符合则跳出循环或递推,表示字符串不是回文。

这里采用C++标准函数库中的string容器进行操作,这也可以方便输入和取元素操作。

递归函数如下:bool IsSymmetry(string::iterator begin,string::iterator end){ if(begin>=end)return true;if(*begin==*end)IsSymmetry(begin+1,end-1);elsereturn false;return true;}每进入一层便去掉首尾元素,然后重新判断。

实验结果:代码:回文.cpp10、狼找兔子问题:实验结果:将山洞定义为结构体,其类型如下:truct Rabbit{int Num;//1表示未被吃掉,表示被吃掉int No;//山洞编号Rabbit*next;};将所有山洞连接成一个循环链表,构建过程如下:Rabbit*Head=new Rabbit;Head->No=0;Head->Num=1;Rabbit*Tail=Head;for (int i=1;i<n;++i){Rabbit*Temp=new Rabbit;Temp->No=i;Temp->Num=1;Tail->next=Temp;Tail=Temp;}Tail->next=Head;查找过程:Rabbit*p=Head;cout<<"被吃掉的小羊依次是: ";while (p->Num){p->Num=0;cout<<p->No<<" ";for (int k=0;k<m;++k)p=p->next;}浪进入某个洞后便将该洞的sum设为0,循环查找链表,当查找到一个已经进入过的洞(*->num=0)跳出循环。

三角形的计算与实际问题解决

三角形的计算与实际问题解决

三角形的计算与实际问题解决三角形是几何学中最常见的形状之一,它具有广泛的应用。

本文将探讨如何计算三角形的各种属性,并通过解决实际问题来展示这些计算的实际应用。

一、三角形的基本概念在开始计算三角形之前,我们需要了解一些基本概念。

一个三角形由三条边和三个角组成。

根据三边的长度,我们可以将三角形分为三种类型:等边三角形、等腰三角形和一般三角形。

1.1 等边三角形等边三角形的三条边长度完全相等,每个角都是60度。

由于对称性,它的任意两条边都是等长的。

等边三角形的周长和面积计算公式如下:周长 = 3 ×边长面积 = ( 边长^2 × √3 ) / 4,1.2 等腰三角形等腰三角形至少有两条边长度相等,两个角也相等。

等腰三角形的特点是有一个顶角和两个底角,底角的角度相等。

等腰三角形的周长和面积计算公式如下:周长 = 2 ×等边长 + 底边长面积 = 底边长 ×高 / 2,其中高是从顶角到底边的垂直距离。

1.3 一般三角形一般三角形的三条边长度各不相同,它没有任何两个角相等。

计算一般三角形的周长和面积稍微复杂一些,需要用到海伦公式。

周长 = 边1 + 边2 + 边3面积= √[ s × (s-边1) × (s-边2) × (s-边3) ],其中 s = (边1 + 边2 + 边3) / 2。

二、实际问题解决接下来,我们将通过解决几个实际问题来展示三角形计算的应用。

2.1 三角形的高度计算现在假设我们有一个不规则三角形,已知三边长分别为3cm、4cm 和5cm,我们想计算从最长边的顶点到底边的垂直距离(即三角形的高度)。

首先,我们可以使用海伦公式计算该三角形的面积。

代入边长,我们得到 s = (3+4+5)/2 = 6cm,面积= √(6 × (6-3) × (6-4) × (6-5)) = 6cm²。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《算法设计》课程报告
课题名称:算法设计
课题负责人名(学号): -- 同组成员名单(角色): --
指导教师: ---
评阅成绩:
评阅意见:
提交报告时间:2014年 6 月 17 日
三角形问题
计算机科学与技术专业
学生-- 指导老师---
[题目描述] 给定一个由n 行数字组成的数字三角形,如下图所示。

试设计一个算法,计算出从三角形的顶到底的一条路径,使该路径经过
的数字总和最大。

7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
编程任务:对于给定的由n 行数字组成的数字三角形,编程计算从三角形的顶到底的路径经过的数字和的最大值。

数据输入:由文件input.txt 提供输入数据。

文件的第 1 行是数字三
角形的行数n,1≤n≤100。

接下来n 行是数字三角形各行中的数字。

所有数字在0~99 之间。

结果输出:程序运行结束时,将计算结果输出到文件output.txt 中。

文件第 1 行中的数是计算出的最大值。

输入文件示例输出文件示例
Input.txt output.txt
5 30
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
[关键词] 数字三角形数字和路径
[算法分析]
采用分治算法自底向上递推即可,二维数组v存放输入的三角形序列,二维数组submax[i][j]保存第i层第j列的所有子树的值,很容易得出递推式为submax[i][j]=v[i][j]+ max{submax[i+1][j],submax[i+1][j+1]}; 递推得到的submax[1][1]即为所求最大值
时间复杂度为O(n^2)
空间复杂度为O(n^2)
[程序实现]
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
#include <fstream>
#include <algorithm>
#include <string>
using namespace std;
#define MAXSIZE 10
int MaxTriangle(int v[MAXSIZE][MAXSIZE] ,int n){
int submax[MAXSIZE][MAXSIZE]={0};
for(int i=1;i<=n;++i)
submax[n][i] = v[n][i];
for(int k=n-1;k>=1;--k){
for(int r=1;r<=k;++r){
submax[k][r] = v[k][r] + (submax[k+1][r] > submax[k+1][r+1] ? submax[k+1][r] : submax[k+1][r+1]);
}
}
/*
for(int u=1;u<=n;++u){
for(int v=1;v<=u;++v){
cout<<submax[u][v]<<" ";
}
cout<<endl;
}
*/
return submax[1][1];
}
int main(){
int n;
int v[MAXSIZE][MAXSIZE];
cout<<"Please input the input file path:"<<endl;
char strPath[63];
while(scanf("%s",strPath)==1){
ifstream fin(strPath);
cout<<"Please input the output file path:"<<endl;
cin>>strPath;
ofstream fout(strPath);
if(fin.good() && fout.good()){
fin>>n;
for(int i=1;i<=n;++i){
for(int j=1;j<=i;++j){
fin>>v[i][j];
}
}
int maxValue = MaxTriangle(v,n);
fout<<maxValue<<endl;
fout.close();
fin.close();
}
else{
cout<<"Open file error!"<<endl;
exit(0);
}
cout<<endl<<endl<<"Please input the input file path:"<<endl;
}
return 0;
}[运行结果]
参考文献
[1] 王晓东.计算机算法设计与分析.--3版.--北京:电子工业出版社2007.5。

相关文档
最新文档