首页 > 后端开发 > C++ > 正文

通过一个点的最大不同直线数在C中

WBOY
发布: 2023-08-26 10:25:06
转载
1164 人浏览过

通过一个点的最大不同直线数在C中

我们得到每条线的数字 N 和两个点 (x1,y1) 和 (x2,y2) 的坐标。目标是从给定的直线中找到可以穿过单个点的最大直线数,使得没有两条直线相互覆盖,并且不执行旋转。

我们将把直线表示为 ( 对) m,c) 其中 y=mx+c,m 是斜率 m=y2-y1/x2-x1

给定 c1!=c2,具有相同 m 的线是平行的。我们将计算不同的坡度(米)。对于垂直线,如果 x1=x2,则斜率 = INT_MAX,否则为 m。

让我们通过示例来理解。

输入 

Line 1 (x1,y1)=(4,10) (x2,y2)=(2,2)
Line 2 (x1,y1)=(2,2) (x2,y2)=(1,1)
登录后复制

输出 

Maximum lines: 2
登录后复制
登录后复制

解释 - 总线数为 2。两条线的斜率不同。

输入 

Line 1 (x1,y1)=(1,5) (x2,y2)=(3,2)
Line 2 (x1,y1)=(2,7) (x2,y2)=(2,8)
登录后复制

输出 

Maximum lines: 2
登录后复制
登录后复制

说明 - 总线数为 2。两者都有不同的斜率。

下面程序中使用的方法如下

  • 整数数组 x1[] 和 x2[] 用于存储线上点的坐标。

  • 函数 numLines(int x1[],int y1[], int x2[], int y2[]) 正在计算经过单个点的线数。

  • 对 x1[] 中的每个点应用公式,y1[],x2[],y2[] 计算斜率并使用 k 增加斜率计​​数。

  • 数组 s[] 存储斜率值。

    >
  • 返回 k 作为结果中的行数。

示例

 实时演示

#include <stdio.h>
int numLines(int n, int x1[], int y1[], int x2[], int y2[]){
   double s[10];
   int k=0;
   double slope;
   for (int i = 0; i < n; ++i) {
      if (x1[i] == x2[i])
         slope = 999;
      else
         slope = (y2[i] - y1[i]) * 1.0 / (x2[i] - x1[i]) * 1.0;
         s[k++]=slope;
   }
   return k;
}
int main(){
   int n = 2;
   int x1[] = { 1, 5 }, y1[] = { 3, 2 };
   int x2[] = { 2,7 }, y2[] = { 2, 8 };
   printf("Maximum lines: %d", numLines(n, x1, y1, x2, y2));
   return 0;
}
登录后复制

输出

如果我们运行上面的代码,它将生成以下输出 -

Maximum distinct lines passing through a single point : 2
登录后复制

以上是通过一个点的最大不同直线数在C中的详细内容。更多信息请关注PHP中文网其他相关文章!

相关标签:
来源:tutorialspoint.com
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板