TUJQ 2020-05-24 17:42 采纳率: 50%
浏览 431

C语言 直线问题 求大神给个代码!

C语言 直线问题

小明上来中学,开始学习直线方程,老师有一天要看看小明学的如何,于是问了他一个问题。给出两个坐标(x1, y1)和(x2, y2)可以唯一确定一条直线,那么,任意给你一个点,你是否可以判断这个点在该直线上吗?
输入:
x1, y1
x2, y2
n
n个坐标x1,y1 x2,y2 .....xn,yn
输出:在直线上的点坐标
包括延长线哦(按照原来的输入顺序),如果没有属于直线上的点,则输出"NoOut.”

  • 写回答

2条回答 默认 最新

  • threenewbee 2020-05-24 18:45
    关注

    如果问题得到解决,请点下采纳

    #include <stdio.h>
    #include <stdlib.h>
    #define epsilon 0.00001
    #define equ(a,b) ((a)-(b)<epsilon&&(b)-(a)<epsilon)
    
    int foo(float x1, float x2, float y1, float y2, float x, float y)
    {
        if (equ(y1, y2)) return equ(y1, y);
        float a = (y1 - y2) / (x1 - x2);
        float b = y1 - x1 * a;
        return equ(x * a + b, y);
    }
    
    int main()
    {
        float x1, x2, y1, y2;
        scanf("%f,%f", &x1, &y1);
        scanf("%f,%f", &x2, &y2);
        int n;
        scanf("%d", &n);
        float * x = (float *)malloc(sizeof(float) * n);
        float * y = (float *)malloc(sizeof(float) * n);
        int * r = (int *)malloc(sizeof(int) * n);
        int exist = 0;
        for (int i = 0; i < n; i++)
        {
            scanf("%f,%f", &x[i], &y[i]);
            r[i] = foo(x1, x2, y1, y2, x[i], y[i]);
            if (r[i]) exist = 1;
        }
        for (int i = 0; i < n; i++)
        {
            if (r[i]) printf("%f,%f\n", x[i], y[i]);
        }
        if (!exist)
            printf("NoOut.\n");
        return 0;
    }
    

    有1个结果:
    图片说明

    有多个结果:
    图片说明

    直线垂直(无法求斜率)
    图片说明

    无结果
    图片说明

    特别注意,因为浮点数有误差,千万不要直接用==比较

    评论

报告相同问题?

悬赏问题

  • ¥15 Workbench中材料库无法更新,如何解决?
  • ¥20 如何推断此服务器配置
  • ¥15 关于github的项目怎么在pycharm上面运行
  • ¥15 内存地址视频流转RTMP
  • ¥100 有偿,谁有移远的EC200S固件和最新的Qflsh工具。
  • ¥15 有没有整苹果智能分拣线上图像数据
  • ¥20 有没有人会这个东西的
  • ¥15 cfx考虑调整“enforce system memory limit”参数的设置
  • ¥30 航迹分离,航迹增强,误差分析
  • ¥15 Chrome Manifest扩展引用Ajax-hook库拦截请求失败