计算两条直线的交点--C语言

呵呵,有点急。。。

#include < stdio.h >

typedef 
struct  point{
    
int  x;
    
int  y;
}point;

typedef 
struct  line{
    point point1;
    point point2;
}line;

// 计算两条直线的交点
point getCross(line line1, line line2)
{
    point CrossP;
    
// y = a * x + b;
     int  a1  =  (line1.point1.y  -  line1.point2.y)  /  (line1.point1.x  -  line1.point2.x);
    
int  b1  =  line1.point1.y  -  a1  *  (line1.point1.x);

    
int  a2  =  (line2.point1.y  -  line2.point2.y)  /  (line2.point1.x  -  line2.point2.x);
    
int  b2  =  line2.point1.y  -  a1  *  (line2.point1.x);

    CrossP.x 
=  (b1  -  b2)  /  (a2  -  a1);
    CrossP.y 
=  a1  *  CrossP.x  +  b1;
    
return  CrossP;
}

void  main()
{
    line line1;
    line line2;

    
// line1
    line1.point1.x  =   10 ;
    line1.point1.y 
=   10 ;
    line1.point2.x 
=   50 ;
    line1.point2.y 
=   50 ;

    
// line2
    line2.point1.x  =   2 ;
    line2.point1.y 
=   60 ;
    line2.point2.x 
=   60 ;
    line2.point2.y 
=   0 ;

    point CointP 
=  getCross(line1, line2);
    printf(
" %d,%d\n " , CointP.x, CointP.y);

}

 

转载于:https://www.cnblogs.com/liulei/archive/2010/06/12/1756909.html

C语言中,求两条直线交点通常涉及到线性方程组的求解。假设我们有两条直线的一般形式: 第一条直线:Ax + By = C 第二条直线:Ex + Fy = G 如果这两条直线相交于一点,那么这个交点P(x, y)应同时满足上述两个方程。我们可以利用Cramer法则或者矩阵运算来找到x和y。 下面是一个简单的C程序示例,演示了如何计算交点坐标。这里假设A、B、C、E、F、G都是已知系数: ```c #include <stdio.h> // 定义一个结构体来表示点 typedef struct { double x; double y; } Point; // 函数声明 Point find_intersection(double A, double B, double C, double E, double F, double G); int main() { // 假设输入的线性方程系数 double A, B, C, E, F, G; // 输入直线方程系数 printf("请输入一条直线的系数(A, B, C): "); scanf("%lf %lf %lf", &A, &B, &C); printf("请输入第二条直线的系数(E, F, G): "); scanf("%lf %lf %lf", &E, &F, &G); // 调用函数求解交点 Point intersection = find_intersection(A, B, C, E, F, G); if (intersection.x == 0 && intersection.y == 0) { printf("两条直线平行,无交点.\n"); } else { printf("两条直线交点为: (%.2lf, %.2lf)\n", intersection.x, intersection.y); } return 0; } // 求解线性方程组 Point find_intersection(double A, double B, double C, double E, double F, double G) { double det; // 计算行列式的值 det = A * F - B * E; // 线性方程组的判别式 // 如果行列式为零,则说明两条直线平行 if (det == 0) { intersection.x = intersection.y = 0.0; // 返回无穷大或未定义,代表平行 } else { intersection.x = (C * F - B * G) / det; intersection.y = (A * G - C * E) / det; } return intersection; } ``` 在这个代码中,`find_intersection`函数通过计算交叉乘积和判定式来确定交点,如果不存在交点则返回(0,0),表示平行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值