c编程求出两条直线的交点一.两条直线?已知直线AB与直线CDA、B、C、D的xy坐标存放在buffer[4] [2]中怎
1个回答

// 以下为我的编码结果,此结果没有考虑竖直方向直线,以及两条直线完全平行的问题

// 因为如果加入这两个条件,程序的复杂程度会上升.

// 问题2与问题1内容完全一致,将问题1做两次就是问题2的结果,所以不做解答

#include "stdio.h"

int main( )

{

x09// 四个点的坐标存在这里面,我随便编几个数据哈.反正不影响算法

x09double buffer[4][2] = {{3,0},{0,1},{1,0},{2,1}};

x09// 假设直线AB的公式为 y = ax + b

x09// a = (y1 - y2)/(x1 - x2)

x09// b = y1 - (y1 - y2)/(x1 - x2) * x1

x09// 如果x1 - x2 == 0,说明这是一条平行于x轴的直线,a = 0, b = y1;

x09double a,b;

x09if ((buffer[0][0] - buffer[1][0]) == 0)

x09{

x09x09a = 0;

x09x09b = buffer[0][1];

x09}

x09else

x09{

x09x09a = (buffer[0][1] - buffer[1][1]) / (buffer[0][0] - buffer[1][0]);

x09x09b = buffer[0][1] - (buffer[0][1] - buffer[1][1])/(buffer[0][0] - buffer[1][0]) * buffer[0][0];

x09}

x09// 同理可证直线CD的描述

x09double c,d;

x09if ((buffer[2][0] - buffer[3][0]) == 0)

x09{

x09x09c = 0;

x09x09d = buffer[2][1];

x09}

x09else

x09{

x09x09c = (buffer[2][1] - buffer[3][1]) / (buffer[2][0] - buffer[3][0]);

x09x09d = buffer[2][1] - (buffer[2][1] - buffer[3][1])/(buffer[2][0] - buffer[3][0]) * buffer[2][0];

x09}

x09// 现在问题转变为y = ax + b和y = cx + d两条直线的交点

x09// x = (d - b)/(a - c)

x09// y = a(d - b)/(a - c) + b;

x09double ResultX, ResultY;

x09ResultX = (d - b)/(a - c);

x09ResultY = a * (d - b)/(a - c) + b;

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

x09return 0;

}