已知两条直线 y=a1x+b1 和 y=a2+b2 求交点坐标 RT!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 a1 b1 和 a2 b2 都是已知的 求帮忙!! 编程思路:1. 建立一个winform 里面需要有一个文本框来输入表达式。2. 用web client或者 web browser 控件登录csdn发帖3. 每隔10秒刷新一下回帖 x = -(b1 - b2)/(a1 - a2) x = -(b1 - b2)/(a1 - a2)y = (a1*b2 - a2*b1)/(a1 - a2) 就是算二元一次方程嘛。 y=a2+b2x=(y-b1)/a1 using System;using System.Collections.Generic;using System.Text;using System.Text.RegularExpressions;using System.Drawing;namespace ConsoleApplication7{ class Program { static PointF GetIntersection( PointF p1, PointF p2, PointF p3, PointF p4 ) { /* * L1,L2都存在斜率的情况: * 直线方程L1: ( y - y1 ) / ( y2 - y1 ) = ( x - x1 ) / ( x2 - x1 ) * => y = [ ( y2 - y1 ) / ( x2 - x1 ) ]( x - x1 ) + y1 * 令 a = ( y2 - y1 ) / ( x2 - x1 ) * 有 y = a * x - a * x1 + y1 .........1 * 直线方程L2: ( y - y3 ) / ( y4 - y3 ) = ( x - x3 ) / ( x4 - x3 ) * 令 b = ( y4 - y3 ) / ( x4 - x3 ) * 有 y = b * x - b * x3 + y3 ..........2 * * 如果 a = b,则两直线平等,否则, 联解方程 1,2,得: * x = ( a * x1 - b * x3 - y1 + y3 ) / ( a - b ) * y = a * x - a * x1 + y1 * * L1存在斜率, L2平行Y轴的情况: * x = x3 * y = a * x3 - a * x1 + y1 * * L1 平行Y轴,L2存在斜率的情况: * x = x1 * y = b * x - b * x3 + y3 * * L1与L2都平行Y轴的情况: * 如果 x1 = x3,那么L1与L2重合,否则平等 * */ float a = 0, b = 0; int state = 0; if (p1.X != p2.X) { a = (p2.Y - p1.Y) / (p2.X - p1.X); state |= 1; } if (p3.X != p4.X) { b = (p4.Y - p3.Y) / (p4.X - p3.X); state |= 2; } switch (state) { case 0: //L1与L2都平行Y轴 { if (p1.X == p3.X) { throw new Exception("两条直线互相重合,且平行于Y轴,无法计算交点。"); } else { throw new Exception("两条直线互相平行,且平行于Y轴,无法计算交点。"); } } case 1: //L1存在斜率, L2平行Y轴 { float x = p3.X; float y = a * x - a * p1.X + p1.Y; return new PointF(x, y); } case 2: //L1 平行Y轴,L2存在斜率 { float x = p1.X; float y = b * x + b * p3.X + p3.Y; return new PointF(x, y); } case 3: //L1,L2都存在斜率 { if (a == b) { throw new Exception("两条直线平行或重合,无法计算交点。"); } float x = (a * p1.X - b * p3.X - p1.Y + p3.Y) / (a - b); float y = a * x - a * p1.X + p1.Y; return new PointF(x, y); } } throw new Exception("不可能发生的情况"); } static void Main(string[] args) { try { PointF pt = GetIntersection( new PointF(0, 0), new PointF(100, 100), new PointF(0, 20), new PointF(100, 80)); Console.WriteLine("交点: ( {0}, {1} )", pt.X, pt.Y); } catch (Exception ex) { Console.WriteLine(ex.Message); } Console.ReadKey(); } }} 这是标准答案,(当然,Y,有很多种写法,化简,或者多项式这些写法, 结果都是一样的)当然, a1 == a2的情况, 就是 平行,他们没有交点,这是需要注意的 用ASP.NET做新闻网站系统:新闻评论功能如何实现? 网頁聊天 datagrid 分页,点下一页没反应! 如何提取下拉列表的值 时间日期格式化问题----在线等 100分求一发文控件 点击页面A的按钮,如何打印页面B的内容? 急啊!我的兄弟姐妹们!页面刷新问题!郁闷散分! JavaScript问题,关于document NHibernate 实体 和映射文件关联问题 给我一份可以上传图片的asp.net能用的富文本编辑器,在线等,急. “string”并不包含“conn”的定义
1. 建立一个winform 里面需要有一个文本框来输入表达式。
2. 用web client或者 web browser 控件登录csdn发帖
3. 每隔10秒刷新一下回帖
y=a2+b2
x=(y-b1)/a1
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
using System.Drawing;namespace ConsoleApplication7
{
class Program
{ static PointF GetIntersection( PointF p1, PointF p2, PointF p3, PointF p4 )
{
/*
* L1,L2都存在斜率的情况:
* 直线方程L1: ( y - y1 ) / ( y2 - y1 ) = ( x - x1 ) / ( x2 - x1 )
* => y = [ ( y2 - y1 ) / ( x2 - x1 ) ]( x - x1 ) + y1
* 令 a = ( y2 - y1 ) / ( x2 - x1 )
* 有 y = a * x - a * x1 + y1 .........1
* 直线方程L2: ( y - y3 ) / ( y4 - y3 ) = ( x - x3 ) / ( x4 - x3 )
* 令 b = ( y4 - y3 ) / ( x4 - x3 )
* 有 y = b * x - b * x3 + y3 ..........2
*
* 如果 a = b,则两直线平等,否则, 联解方程 1,2,得:
* x = ( a * x1 - b * x3 - y1 + y3 ) / ( a - b )
* y = a * x - a * x1 + y1
*
* L1存在斜率, L2平行Y轴的情况:
* x = x3
* y = a * x3 - a * x1 + y1
*
* L1 平行Y轴,L2存在斜率的情况:
* x = x1
* y = b * x - b * x3 + y3
*
* L1与L2都平行Y轴的情况:
* 如果 x1 = x3,那么L1与L2重合,否则平等
*
*/ float a = 0, b = 0;
int state = 0; if (p1.X != p2.X)
{
a = (p2.Y - p1.Y) / (p2.X - p1.X);
state |= 1;
}
if (p3.X != p4.X)
{
b = (p4.Y - p3.Y) / (p4.X - p3.X);
state |= 2;
}
switch (state)
{
case 0: //L1与L2都平行Y轴
{
if (p1.X == p3.X)
{
throw new Exception("两条直线互相重合,且平行于Y轴,无法计算交点。");
}
else
{
throw new Exception("两条直线互相平行,且平行于Y轴,无法计算交点。");
}
}
case 1: //L1存在斜率, L2平行Y轴
{
float x = p3.X;
float y = a * x - a * p1.X + p1.Y;
return new PointF(x, y);
}
case 2: //L1 平行Y轴,L2存在斜率
{
float x = p1.X;
float y = b * x + b * p3.X + p3.Y;
return new PointF(x, y);
}
case 3: //L1,L2都存在斜率
{
if (a == b)
{
throw new Exception("两条直线平行或重合,无法计算交点。");
}
float x = (a * p1.X - b * p3.X - p1.Y + p3.Y) / (a - b);
float y = a * x - a * p1.X + p1.Y;
return new PointF(x, y);
}
}
throw new Exception("不可能发生的情况");
}
static void Main(string[] args)
{
try
{
PointF pt = GetIntersection(
new PointF(0, 0),
new PointF(100, 100),
new PointF(0, 20),
new PointF(100, 80));
Console.WriteLine("交点: ( {0}, {1} )", pt.X, pt.Y);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
} Console.ReadKey(); }
}}
这是标准答案,(当然,Y,有很多种写法,化简,或者多项式这些写法, 结果都是一样的)当然, a1 == a2的情况, 就是 平行,他们没有交点,这是需要注意的