标题:[求助]程序求助!!!
只看楼主
wanghuan_0827
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2005-4-27
 问题点数:0 回复次数:8 
[求助]程序求助!!!
程序如下:问题多多,但我不会改,各位高手,帮帮小女子吧,程序是:先用已知的三点确定一个类似三角形的区域,在给出一个点,判断此点是否再次区域中,这里我用的是比较角度得到大小来判断的,希望高人可以指点,如有好的方法就更不胜感激了!!!

#include<stdio.h>
#include<math.h>
void cal(x1,x2,x3,x4,y1,y2,y3,y4)
int x1=1, x2=2, x3=3, y1=4, y2=5, y3=6, x4,y4;
double ang1,ang2,ang3,ang4;
{
double a,b,c;
a=(y1-y2)/(x1-x2);
ang1=atan(a);
b=(y3-y2)/(x3-x2);
ang2=atan(b);
ang3=fabs(ang1-ang2);
c=(y4-y2)/(x4-x2);
ang4=atan(c);
}
int judge(ang3,ang4);
double ang3,ang4;
{if
ang3(fabs(ang4))
return(1);
else
return(0);
}
main()
{int x1=1,x2=2,x3=3,y1=4,y2=5,y3=6,x4,y4;
 double ang1,ang2,ang3,ang4;
 int judge();
void cal();
printf("enter number:");
scanf("%d%d",&x4,&y4);
if (judge(ang3,ang4))
printf("the point is outside!");
else
printf("the point is inside!");
return(0);
}
搜索更多相关主题的帖子: 帮帮小女子 不胜感激 include double 三角形 
2005-04-27 13:12
0899
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2005-4-26
得分:0 
本人不是高手,只是路过,有机会一起研究

2005-04-27 22:08
牛虻
Rank: 1
等 级:新手上路
威 望:1
帖 子:472
专家分:0
注 册:2004-10-1
得分:0 
给点注释~

土冒
2005-04-27 23:39
xiaodongcd
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2005-4-27
得分:0 
看不太懂,关注中……,希望高手能给点指点

2005-04-28 10:18
musicml
Rank: 1
等 级:新手上路
帖 子:273
专家分:0
注 册:2005-4-2
得分:0 

加点注释把! 不知道你思路! //程序如下: //问题多多,但我不会改,各位高手,帮帮小女子吧, //程序是:先用已知的三点确定一个类似三角形的区域, //在给出一个点,判断此点是否再次区域中 //,这里我用的是比较角度得到大小来判断的, //希望高人可以指点,如有好的方法就更不胜感激了!!!

#include<stdio.h> #include<math.h> void cal(int x1,int x2,int x3,int x4,int y1,int y2,int y3,int y4) { //int x1=1, x2=2, x3=3, y1=4, y2=5, y3=6, x4,y4; double ang1,ang2,ang3,ang4; //{ double a,b,c; a=(y1-y2)/(x1-x2); ang1=atan(a); b=(y3-y2)/(x3-x2); ang2=atan(b); ang3=fabs(ang1-ang2); c=(y4-y2)/(x4-x2); ang4=atan(c); } int judge(double ang3,double ang4) //double ang3,ang4; { if (ang3==(fabs(ang4))) return(1); else return(0); } main() {int x1=1,x2=2,x3=3,y1=4,y2=5,y3=6,x4,y4; double ang1,ang2,ang3,ang4; ///int judge(); //void cal(); printf("enter number:"); scanf("%d%d",&x4,&y4); if (judge(ang3,ang4)) printf("the point is outside!"); else printf("the point is inside!"); return(0); } 没语法错误 但结果不对!


Every thing is possible.
2005-04-28 11:42
yuki
Rank: 2
等 级:新手上路
威 望:5
帖 子:508
专家分:0
注 册:2005-2-4
得分:0 

贴上我的想法,不知到是不是正确。。。 #include <stdio.h> #include <math.h> #include <conio.h>

#define EPSILON 1e-24

typedef unsigned char BOOL;

/* 三角形区域结构 */ typedef struct triArea { /* 向量AB */ double vAB[2]; /* 向量AC */ double vAC[2]; /* 向量BC */ double vBC[2]; /* 向量AB和向量AC的夹角 */ double angleAB_AC; /* 向量AB和向量BC的夹角 */ double angleAB_BC; /* 向量BC和向量AC的夹角 */ double angleBC_AC; };

/* 取两数中最大值 */ double max(double,double); /* 趋近比较 */ BOOL approx_equal(double,double); /* 通过平面两座标计算向量坐标 */ void convert(double [],double [],double []); /* 计算两向量的点积 */ double valmuti(double [],double []); /* 计算一个向量的模 */ double mod(double []); /* 计算两向量夹角的cos值 */ double vector_cos(double [],double []);

int main() { /* 定义一个测试点 */ double posD[2]; /* 定义构成三角形平面的三个顶点 */ double posA[2]={1,4},posB[2]={2,5},posC[2]={3,6}; /* 定义测试点与三角区域个顶点的夹角和与顶点的连线向量 */ double vAD[2],vBD[2],vCD[2]; double angleAD_AB,angleAD_AC,angleBD_AB,angleBD_BC,angleCD_AC,angleCD_BC; /* 定义一个三角形区域 */ triArea region; /* 计算三角形区域的边界向量 */ convert(posA,posB,region.vAB); convert(posA,posC,region.vAC); convert(posB,posC,region.vBC); /* 计算三角形区域的三个顶角的度数 */ region.angleAB_AC=acos(vector_cos(region.vAB,region.vAC)); region.angleAB_BC=acos(vector_cos(region.vAB,region.vBC)); region.angleBC_AC=acos(vector_cos(region.vBC,region.vAC)); double triAB,triAC,triBC; printf("Input a position (x,y)="); scanf("%lf,%lf",&posD[0],&posD[1]); /* 计算测试点与三角形区域三个顶点构成的向量 */ convert(posA,posD,vAD); convert(posB,posD,vBD); convert(posC,posD,vCD); /* 计算测试点与各个顶点的夹角 */ angleAD_AB=acos(vector_cos(region.vAB,vAD)); angleAD_AC=acos(vector_cos(region.vAC,vAD)); angleBD_AB=acos(vector_cos(region.vAB,vBD)); angleBD_BC=acos(vector_cos(region.vBC,vBD)); angleCD_AC=acos(vector_cos(region.vAC,vCD)); angleCD_BC=acos(vector_cos(region.vBC,vCD)); /* 趋近比较 */ if(approx_equal(angleAD_AB+angleAD_AC,region.angleAB_AC)&& approx_equal(angleBD_AB+angleBD_BC,region.angleAB_BC)&& approx_equal(angleCD_AC+angleCD_BC,region.angleBC_AC)) { printf("Position (%lf,%lf) is in the triangle region!\n",posD[0],posD[1]); } else { printf("Position (%lf,%lf) is not in the triangle region!\n",posD[0],posD[1]); } getch(); return 1; }

double max(double a,double b) { return a>b?a:b; }

BOOL approx_equal(double a,double b) { if(!a&&b) return fabs(b)<=EPSILON; if(a&&!b) return fabs(a)<=EPSILON; return (fabs(a-b)/max(fabs(a),fabs(b)))<=EPSILON; }

void convert(double bpos[],double epos[],double v[]) { register int i; for(i=0;i<2;v[i]=epos[i]-bpos[i],i++); }

double valmuti(double v1[],double v2[]) { register int i; double result=0; for(i=0;i<2;result+=v1[i]*v2[i],i++); }

double mod(double v[]) { register int i; double result=0; for(i=0;i<2;result+=pow(v[i++],2)); return sqrt(result); }

double vector_cos(double v1[],double v2[]) { return valmuti(v1,v2)/(mod(v1)*mod(v2)); }


我们都在命运湖上荡舟划桨,波浪起伏使我们无法逃离孤行;如果我们迷失方向,波浪将指引我们穿过另一天曙光
2005-04-28 11:52
yuki
Rank: 2
等 级:新手上路
威 望:5
帖 子:508
专家分:0
注 册:2005-2-4
得分:0 
中午由于要去吃饭和上课,所以匆匆忙忙的把代码贴,没来得及解释,现在补上


大家请看图,已知二维平面中坐标以知的三点A,B,C,另有一点D,欲判断D受否在该三角形区域内。。

首先我先把构成三角形区域的三个向量AB,BC,AC向量计算出来,并依次求出它们两两所夹的角。然后将点D分别和三个顶点相连构成三条新的向量AD,BD,CD,我的思路便是分别判断AB与AD,AC与AD的夹角的和是否等于AB与AC的夹角,同理AB与BD,BD与CD的夹角和是否等于AB与BC的夹角,CD与CB,CD与AC的夹角和是否等于BC和AC的夹角,如果上述三个条件都满足,则认为D点在该三角形区域内。。。

不知道我的看法是不是正确,希望高手能够给出更精确的解释。。。

我们都在命运湖上荡舟划桨,波浪起伏使我们无法逃离孤行;如果我们迷失方向,波浪将指引我们穿过另一天曙光
2005-04-28 17:33
weizheng
Rank: 1
等 级:新手上路
威 望:2
帖 子:286
专家分:0
注 册:2005-4-21
得分:0 
我狂晕,这难!!!!

温和如玉,完美纯正。
2005-04-29 21:43
wanghuan_0827
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2005-4-27
得分:0 
谢谢各位了,非常感谢,希望大家继续关注!!!
2005-05-05 13:31



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-16834-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.074144 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved