判断一个点是否在三角形内部用C语言怎么编?

供稿:hz-xin.com     日期:2025-01-14
怎么编一个判断点在三角形内的C语言程序?

以下代码定义了三个函数:
point:定义点的位置,
area:定义三角形的大小
main:主程序,通过调用point,area函数判断点是否在三角形内
#include#includestruct point{ double x; double y;};int area(float m,float n,float t){ float p,S; p=(m+n+t)/2; S=sqrt(p*(p-m)*(p-n)*(p-t)); return S;}void main(){ struct point a,b,c,d,p; float AB,BC,AC; float S0,S1,S2,S3; float DA,DB,DC; scanf("%lf,%lf
",&a.x,&a.y); scanf("%lf,%lf
",&b.x,&b.y); scanf("%lf,%lf
",&c.x,&c.y); AB=sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)); BC=sqrt((b.x-c.x)*(b.x-c.x)+(b.y-c.y)*(b.y-c.y)); AC=sqrt((a.x-c.x)*(a.x-c.x)+(a.y-c.y)*(a.y-c.y)); if((AB+BC)>AC && (AB+AC)>BC && (AC+BC)>AB){ printf("请输入D点坐标:
"); scanf("%lf,%lf
",&d.x,&d.y); DA=sqrt((d.x-a.x)*(d.x-a.x)+(d.y-a.y)+(d.y-a.y)); DB=sqrt((d.x-b.x)*(d.x-b.x)+(d.y-b.y)+(d.y-b.y)); DC=sqrt((d.x-c.x)*(d.x-c.x)+(d.y-c.y)+(d.y-c.y)); S0=area(AB,BC,AC); S1=area(DA,DB,AB); S2=area(DA,DC,AC); S3=area(DB,DC,BC); if(S1+S2+S3-S0==0) printf("点D位于三角形内部
"); else printf("点D位于三角形外部
"); } else printf("不能构成三角形!");}

#include
#include
struct point
{
double x;
double y;
};
int area(float m,float n,float t)
{
float p,S;
p=(m+n+t)/2;
S=sqrt(p*(p-m)*(p-n)*(p-t));
return S;
}
void main()
{
struct point a,b,c,d,p;
float AB,BC,AC;
float S0,S1,S2,S3;
float DA,DB,DC;
scanf("%lf,%lf
",&a.x,&a.y);
scanf("%lf,%lf
",&b.x,&b.y);
scanf("%lf,%lf
",&c.x,&c.y);
AB=sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
BC=sqrt((b.x-c.x)*(b.x-c.x)+(b.y-c.y)*(b.y-c.y));
AC=sqrt((a.x-c.x)*(a.x-c.x)+(a.y-c.y)*(a.y-c.y));
if((AB+BC)>AC && (AB+AC)>BC && (AC+BC)>AB){
printf("请输入D点坐标:
");
scanf("%lf,%lf
",&d.x,&d.y);
DA=sqrt((d.x-a.x)*(d.x-a.x)+(d.y-a.y)+(d.y-a.y));
DB=sqrt((d.x-b.x)*(d.x-b.x)+(d.y-b.y)+(d.y-b.y));
DC=sqrt((d.x-c.x)*(d.x-c.x)+(d.y-c.y)+(d.y-c.y));
S0=area(AB,BC,AC);
S1=area(DA,DB,AB);
S2=area(DA,DC,AC);
S3=area(DB,DC,BC);
if(S1+S2+S3-S0==0)
printf("点D位于三角形内部
");
else
printf("点D位于三角形外部
");
}
else
printf("不能构成三角形!");
}
//看看这样可比可以。你这个题还有更简单的方法,试试把每个边当成直线段,然后用d点带入和0比较大小,就会很简单。

沿着三角形的边按顺时针方向走,判断该点是否在每条边的右边(这可以通过叉乘判断),如果该点在每条边的右边,则在三角形内,否则在三角形外。这个算法只用到了三次叉乘,没有除法运算和三角函数、开根号等运算,所以效率很高,而且精度很高(没有浮点误差)。

这道题有两种算法,第一种算法是面积法,用该点与三角形每一个端点连接,这样构成三个三角形,求新连接的三角形面积和于原三角形面积是否相等(用叉积或海伦公示),如相等即在三角形内(边界情况可能要单考虑),该方法思路简单但是代码书写较长。还有就是计算几何的方法,建议上网查查计算几何。

这个是用python写的(用来判断是否正确的function):

import math

#这里的输入是三个顶点的坐标所组成的6个元素的array

def TriangleArea(arr):
areas = [0, 0, 0, 0] #用来存ABC, OAB, OAC, OBC的面积
areas[0] = 0.5*abs(arr[0] * (arr[3] - arr[5]) + arr[2]*(arr[5] - arr[1]) + arrt[4]*(arr[1] - arr[3]))
areas[1] = 0.5*abs(arr[0] * arr[3] - arr[2]*arr[1])
areas[2] = 0.5*abs(arr[2] * arr[5] - arr[4]*arr[3])
areas[3] = 0.5*abs(arr[0] * arr[5] - arr[4]*arr[1])

# 后三者的面积均不为零,否则原点在边或顶点上

if areas[1] * areas[2] * areas[3] != 0 and areas[0] == areas[1] + areas[2] + areas[3]:
return 1 # 在三角形内
else:

return 0 # 不在三角形内

用C应当类似,可以仿照写.

叉乘...

关于C语言程序 三角形知顶点求内角
把你的代码贴上来吧,我看看能不能给你改一下!!基本思路是使用余弦定理 cos B = (a^2 + c^2 -b^2) \/ (2*a*c);首先可以算出三条边的长度,如果有两个之和等于第三个,那么就是三点共线,不是三角形。其他情况就是三角形了,调用余弦定理一个一个算就行了。下面是代码 include <...

在C语言中,输入三个数,判断他们能否构成三角形,如果可以,能构成何种三 ...
就是单纯的条件语句,我没写近似值的比较,你想输入精确的小数比较(比如满足1:2:√3),自己写个取近似值的函数再传值好了。include<stdio.h>double jd(double a,double b,double c);\/\/通过3个角度判断 返回0:不是三角形 返回1:是三角double bc(double a,double b,double c);\/\/通过3...

c语言,判断是否是直角三角形。求详细编程
while (1){ scanf("%d %d %d",&a,&b,&c);\/\/输入三边数据 if (((a+b)>c)&&((a+c)>b)&&((b+c)>a))\/\/判断是否为三角形 { printf("三角形三边为:%d,%d,%d\\n",a,b,c);break;} else { printf("这不是三角形,请重新输入:\\n");} } \/\/计算平方数 a = a * a;b...

C语言判断三角形
= 号 与 ==的区别 你还搞明白??=号是赋值 ==才是用来做条件判断的 还错了2个分号";"倒数第2行 倒数第6行 要注意 中英文的 标点符号(这个初学者容易错)正确:include<stdio.h> void main (){ float a, b, c;printf("请输入三角形三边");scanf("%f,%f,%f",&a,&b,&c);if ...

c语言,定义一个函数intfun(inta,intb,intc)它的功能是若a,b,c能构成...
include <stdio.h> int intfun(int a,int b,int c){ if(a+b<=c||a+c<=b||b+c<=a)\/*判断是否能构成三角形*\/ return -1; \/\/不构成三角形 else { if((a==c||a==b||b==c )&& !(a==c && a==b))\/*判断是否为等腰三角形*\/ return 2;else if(a==c && a==b)...

这个“判断三角形类型”的程序错在哪?
首先呢,你的 那个判断等腰的格式就错了“((a==b!=c)||(a==c!=b)||(b==c!=a))”,C语言的的语句,与我们口头的表述不一样,你要改成((a==b&b!=c)||(a==c&c!=b)||(b==c&b!=a))这个是我新编的,你可以试试 include <stdio.h> include <math.h> void main(){ float...

用C语言判断某点是否存在于一个四边形内
如果四边形的面积与后面四个三角形的面积的和相等,且后面四个三角形的面积皆不为零,则O点在四边形内部。提示一下:四边形的面积=三角形ABC的面积+三角形CDA的面积 三角形面积求法:设a,b,c为三角形三条边长,令s=(a+b+c)\/2,则面积为:根下(s(s-a)(s-b)(s-c))四个点能否围成四边...

c语言三角形判断是否为三角形
c语言三角形判断是否为三角形的步骤如下:在C语言中,我们可以编写一个程序来判断给定的三个数是否能构成三角形。一个基本的规则是,任意两边之和必须大于第三边。程序如下:include <stdio.h> int main() { int a, b, c; printf("请输入三个数:"); scanf("%d %d %d", &a, &b,...

用C语言编写一个判断三角形的函数,求大佬帮忙修改!
if(a==b&&a==c) printf("equilateral triangle\\n"); else if(a==b||b==c||a==c) printf("isoceles triangle\\n"); else if(fabs(a*a+b*b-c*c)<1e-8||fabs(a*a+c*c-b*b)<1e-8||fabs(b*b+c*c-a*a)<1e-8)\/\/有改动 printf(...

用C语言键盘输入三个整数,判断此三数能否作为三角形的三个边,若能...
include<stdio.h> void main(){ int a,b,c,t;scanf("%d%d%d",&a,&b,&c);if(a>0&&b>0&&c>0){ if(a+b>c&&a-b<c){ printf("这个是三角形\\n");if(a>b){t=a; a=b; b=t;} if(b>c){t=b; b=c; c=t;}\/*把最长的一条边换到c边上,后面的就比较好比较*\/ if...