c编程求出两条直线的交点

一.两条直线?已知直线AB与直线CDA、B、C、D的xy坐标存放在buffer[4][2]中怎么求出这两条直线的交点呢???二.那如果4条直线呢???已知直线AB与直线C... 一. 两条直线?
已知直线AB与直线CD
A、B、C、D的xy坐标存放在buffer[4] [2]中

怎么求出这两条直线的交点呢???

二. 那如果4条直线呢???

已知直线AB与直线CD、直线EF与直线MN
A、B、C、D、E、F、M、N的xy坐标存放在buffer[8] [2]中

详细解释每条语句,非常感谢!!
展开
 我来答
GiraKoo
推荐于2018-05-04 · 还没有任何签名哦
GiraKoo
采纳数:3949 获赞数:11110

向TA提问 私信TA
展开全部
// 以下为我的编码结果,此结果没有考虑竖直方向直线,以及两条直线完全平行的问题
// 因为如果加入这两个条件,程序的复杂程度会上升。
// 问题2与问题1内容完全一致,将问题1做两次就是问题2的结果,所以不做解答
#include "stdio.h"

int main( )
{  
// 四个点的坐标存在这里面,我随便编几个数据哈。反正不影响算法
double buffer[4][2] = {{3,0},{0,1},{1,0},{2,1}};

// 假设直线AB的公式为 y = ax + b
// a = (y1 - y2)/(x1 - x2)
// b = y1 - (y1 - y2)/(x1 - x2) * x1
// 如果x1 - x2 == 0,说明这是一条平行于x轴的直线,a = 0, b = y1;
double a,b;
if ((buffer[0][0] - buffer[1][0]) == 0)
{
a = 0;
b = buffer[0][1];
}
else
{
a = (buffer[0][1] - buffer[1][1]) / (buffer[0][0] - buffer[1][0]);
b = buffer[0][1] - (buffer[0][1] - buffer[1][1])/(buffer[0][0] - buffer[1][0]) * buffer[0][0];
}

// 同理可证直线CD的描述
double c,d;
if ((buffer[2][0] - buffer[3][0]) == 0)
{
c = 0;
d = buffer[2][1];
}
else
{
c = (buffer[2][1] - buffer[3][1]) / (buffer[2][0] - buffer[3][0]);
d = buffer[2][1] - (buffer[2][1] - buffer[3][1])/(buffer[2][0] - buffer[3][0]) * buffer[2][0];
}

// 现在问题转变为y = ax + b和y = cx + d两条直线的交点
// x = (d - b)/(a - c)
// y = a(d - b)/(a - c) + b;
double ResultX, ResultY;
ResultX = (d - b)/(a - c);
ResultY = a * (d - b)/(a - c) + b;

printf("x = %f, y = %f", ResultX, ResultY);

return 0;
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式