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]中
详细解释每条语句,非常感谢!! 展开
已知直线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]中
详细解释每条语句,非常感谢!! 展开
1个回答
展开全部
// 以下为我的编码结果,此结果没有考虑竖直方向直线,以及两条直线完全平行的问题
// 因为如果加入这两个条件,程序的复杂程度会上升。
// 问题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;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询