| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3394 人关注过本帖
标题:如何用C语言解出多条线段的交点坐标?求大师赐教!
只看楼主 加入收藏
宇宙规律
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:232
专家分:128
注 册:2014-5-7
收藏
得分:0 
y=-(a1/b1)*x-c1/b1
y=-(a2/b2)*x-c2/b2

x=(b2*c1-b1*c2)/(a2*b2-a1*b1)
y=(c2*a1-a2*c1)/(a2*b1-a1*b2)

即 jx=(b[i]*c[j]-b[j]*c[i])/(a[i]*b[j]-a[j]*b[i]);
   jy=(c[i]*a[j]-c[j]*a[i])/(a[i]*b[j]-a[j]*b[i]);
2014-05-10 13:36
top398
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:427
专家分:857
注 册:2014-5-2
收藏
得分:0 
提个建议:
if(a[i]*b[j]-a[j]*b[i]!=0)
可以直接表达为:
if ( a[i] * b[j] != a[j] * b[i] )
或者上一步推理出的:
if ( a[i] / b[i] != a[j] / b[j] )
总之怎样能让语句意义清晰就怎样写。
2014-05-10 13:42
宇宙规律
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:232
专家分:128
注 册:2014-5-7
收藏
得分:0 
问题1:return ((u<=max&&u>=min)?1:0)用1:0是什么情况?

问题2:int n,i,j,num; //n为线段条数;       num=0;        num++;是什么用途作用?
2014-05-10 13:57
top398
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:427
专家分:857
注 册:2014-5-2
收藏
得分:0 
以下是引用宇宙规律在2014-5-10 13:57:58的发言:

问题1:return ((u<=max&&u>=min)?1:0)用1:0是什么情况?
 
问题2:int n,i,j,num; //n为线段条数;       num=0;        num++;是什么用途作用?
1:a?b:c,是C语言的三元表达式,意为当a为真时,表达式取值为b,否则取值为c。
2:num++,为自增量达式,该表达式返回num的当前值,然后将num加1。
看来你还需学习一下C语言的基础知识。


[ 本帖最后由 top398 于 2014-5-10 14:06 编辑 ]
2014-05-10 14:05
宇宙规律
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:232
专家分:128
注 册:2014-5-7
收藏
得分:0 
请问:num 在如下程序中是什么功能呢?我从来没有见过这样的程序;


#include <stdio.h>
#include <stdlib.h>
// 此函数判断交点坐标是否在线段坐标范围内,即判断交点是否落在线段上
int between(float u, float v, float w)
{ float max,min;
  max=(v>w)?v:w;
  min=(v<w)?v:w;
  return ((u<=max&&u>=min)?1:0);
}
int main()
{
  int n,i,j,num; //n为线段条数
  float x1[100],y1[100],x2[100],y2[100],a[100],b[100],c[100],jx,jy;
  while(scanf("%d",&n)&&n!=0)
  {   
   num=0;   
   for(i=0;i<n;++i)
   { scanf("%f%f%f%f",&x1[i],&y1[i],&x2[i],&y2[i]);
     if(x1[i]==x2[i])
     {
       a[i]=1;b[i]=0;c[i]=-x1[i];
     }
     else
     {
       a[i]=(y2[i]-y1[i])/(x1[i]-x2[i]);b[i]=1;
       c[i]=(x1[i]*y2[i]-x2[i]*y1[i])/(x2[i]-x1[i]);
     }
   }
   for(i=0;i<n;++i)
   {
      for(j=i+1;j<n;++j)
      {
         if(a[i]*b[j]-a[j]*b[i]!=0)
        {
          jx=(b[i]*c[j]-b[j]*c[i])/(a[i]*b[j]-a[j]*b[i]);
          jy=(c[i]*a[j]-c[j]*a[i])/(a[i]*b[j]-a[j]*b[i]);
          if(between(jx,x1[i],x2[i])&&between(jx,x1[j],x2[j])&&between(jy,y1[i],y2[i])&&between(jy,y1[j],y2[j]))
          //printf("(%f,%f)\n ",jx,jy);
          num++;
       }
      }
   }
   printf("%d\n",num);
  }
  return 0;
}
2014-05-10 14:13
宇宙规律
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:232
专家分:128
注 册:2014-5-7
收藏
得分:0 
a*x1+b*y1+c=0       a*x2+b*y2+c=0

b=1时,
a=(y2-y1)/(x1-x2)
c=(x1*y2-x2*y1)/(x2-x1)
2014-05-10 14:39
top398
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:427
专家分:857
注 册:2014-5-2
收藏
得分:20 
开始时
num = 0
在循环中
if(a[i]*b[j]-a[j]*b[i]!=0)
即两线段不平行的时候
num++
那么就说明 num 保存了两两不平行线段的数目,每找到一对不平行线段,就加1。
2014-05-10 14:47
宇宙规律
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:232
专家分:128
注 册:2014-5-7
收藏
得分:0 
原来如此啊!
2014-05-10 14:51
宇宙规律
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:232
专家分:128
注 册:2014-5-7
收藏
得分:0 
回复 18 楼 ditg
模型是普适的!可以用来预测欧元美元黄金股票等,但需要把数据收集准确!
2014-05-10 15:13
宇宙规律
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:232
专家分:128
注 册:2014-5-7
收藏
得分:0 
金融市场的非线性混沌很难预测准确的原因,可能是数学哲学道理落后了!

例如:天道盈而不溢,胜而不骄,劳而不持其功;等;哲学落后=问题定性模糊,结果定量后预测经常失误!
2014-05-10 15:21
快速回复:如何用C语言解出多条线段的交点坐标?求大师赐教!
数据加载中...
 
   



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

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