读取两个坐标点打印连接点的直线方程

Posted

技术标签:

【中文标题】读取两个坐标点打印连接点的直线方程【英文标题】:Read two coordinate points print the equation of line joining the points 【发布时间】:2022-01-22 04:29:53 【问题描述】:
#include<stdio.h>
main()

    int x1,y1,x2,y2,c,y,x;
    float m;
    scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
    printf("the two cordinate points are <%d,%d> and <%d,%d>",x1,y1,x2,y2);

    if(m=y2-y1/x2-x1)
    y=m*x+c;
    c=y-m*x;
    printf("the equation of a straight line is y=mx+c");
    else printf("no equation");
    return 0;
  

我没有得到答案。我想我在表达斜率或常数项时遇到了麻烦。你能[帮忙吗?]

【问题讨论】:

【参考方案1】:

设置m的行有两个问题:

您需要使用括号,否则编译器会先评估y1/x1,然后再执行其他操作。 将该行放在if 语句中是不寻常的,因为看起来您可能正在尝试进行比较;让我们把它放在自己的位置上。 由于m 是浮点数,您可能希望进行浮点除法而不是整数除法。

将这些信息放在一起,我们得到这条线来计算斜率:

m = (float)(y2 - y1) / (x2 - x1);

现在我认为我们应该删除if 语句和与之对应的else 子句。零斜率没有理由必须是导致程序终止的特殊情况。

继续下一行。 x 未初始化,因此请注释掉从中读取的行。编译器应该已经警告过你,所以请确保你的编译器警告已启用,并且你阅读了它们,并修复了它们。

// y = m * x + c
// c = y - m * x

要计算c,我认为您要运行的行是:

c = y1 - m * x1;

(您同样可以使用y2x2。)

然后你只需要添加一行打印mc。您已经知道如何使用 printf 打印整数,因为您之前在程序中打印了 4 个整数,所以只需添加另一行,例如打印 mc

【讨论】:

m = (y2 - y1) / (x2 - x1); 将不起作用(它是 indeter 除法)。你需要m = (float)(y2 - y1) / (x2 - x1); 我有一个疑问,什么时候使用 if 条件我很困惑,因为我在这段代码中犯了一个错误 您可能希望有一个if 语句来检查是否x1 == x2,这样您就可以避免除以零。否则我认为你不需要它。

以上是关于读取两个坐标点打印连接点的直线方程的主要内容,如果未能解决你的问题,请参考以下文章

两个坐标点的距离怎样算

用Matlab编程,已知两个点的坐标,怎么求直线的方程啊?

霍夫变换

如何计算两个GPS坐标点的距离?

图形学--(中点画线法+Bresenham画线算法)

matlab 求点坐标