关键词不能为空

当前您在: 主页 > 高中公式大全 >

右侧交易公式两条线段是否相交,计算交点公式

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2020-09-30 19:38
tags:线段公式

十堰有哪些大学-南辕北辙的启示

2020年9月30日发(作者:程玉兰)
两条线段是否相交,计算交点公式。

A本身无限长,假设B也无限长,直 接求得AB的交点
坐标,然后再判断该坐标是否在定长线段B的内部就可以了
啊 AB本身就是两条直线,知道两端点就可以知道其直
线方程,B也是一样,两个方程联立,
得到一个坐标,再看该坐标是否在B的定义域内就可以


A的两点为(x1,y1),(x2,y2)
则A的直线方程为l1:y-y1=(y2-y1)(x-x1)(x2-x1)
B的两点为(x3,y3),(x4,y4)
则B的直线方程为l2:y-y3=(y4-y3)(x-x3)(x4-x3)

联立解出交点坐标为的横坐标为:
x=(k2x3-y3-k1x1+y1)(k2-k1)
其中k1=(y2-y1)(x2-x1)
k2=(y4-y3)(x4-x3)
可以推导出来
x = ((x2 - x1) * (x3 - x4) * (y3 - y1) -
x3 * (x2 - x1) * (y3 - y4) + x1 * (y2 - y1) * (x3 -
x4))
((y2 - y1) * (x3 - x4) - (x2 - x1) * (y3 - y4));
同理也可以推导出y的值:
y = ((y2 - y1) * (y3 - y4) * (x3 - x1) -
y3 * (y2 - y1) * (x3 - x4) + y1 * (x2 - x1) * (y3 -
y4))
((y2 - y1) * (y3 - y4) - (y2 - y1) * (x3 - x4));


总结:
第一条直线 double x1 = 10, y1 = 20, x2 = 100, y2 = 200;
double a = (y1 - y2) (x1 - x2); double b = (x1 * y2 - x2 * y1)
(x1 - x2); n(求出该直线方程为: y=
第二条 double x3 = 50, y3 = 20, x4 = 20, y4
= 100; double c = (y3 - y4) (x3 - x4); double d = (x3 * y4 -
x4 * y3) (x3 - x4); n(求出该直线方程为:
y= double x = ((x1 - x2) * (x3 * y4 - x4 *
y3) - (x3 - x4) * (x1 * y2 - x2 * y1)) ((x3 - x4) * (y1 -
y2) - (x1 - x2) * (y3 - y4)); double y = ((y1 - y2) * (x3 * y4
- x4 * y3) - (x1 * y2 - x2 * y1) * (y3 - y4)) ((y1 - y2) *
(x3 - x4) - (x1 - x2) * (y3 - y4)); n(他们
的交点为: (
****************************** *********************
*****************
下面附上java的实现,
前提是:a 线段1起点坐标
b 线段1终点坐标
c 线段2起点坐标
d 线段2终点坐标



Java代码 import public class
AlgorithmUtil { public static void main(String[] args)
{ ersection(new Point(1, 2),
new Point(1, 2), new Point(1, 2), new
Point(1, 2)); ersection(new
Point(1, 2), new Point(1, 2), new Point(1,
4), new Point(1, 4));
ersection(new Point(100, 1), new
Point(100, 100), new Point(100, 101), new
Point(100, 400));
ersection(new Point(5, 5), new Point(100,
100), new Point(100, 5), new Point(5,
100)); } ** * 判断两条线是否相交 a
线段1起点坐标 b 线段1终点坐标 c 线段2起点坐标 d 线
段2终点坐标 intersection 相交点坐标 * reutrn 是否
相交: 0 : 两线平行 -1 : 不平行且未相交 1 : 两线相交
* private static int GetIntersection(Point a, Point b,
Point c, Point d) { Point intersection = new Point(0,
0); if ((b.y - a.y) + (b.x - a.x) +
(d.y - c.y) + (d.x - c.x)
== 0) { if ((c.x - a.x) + (c.y - a.y) == 0)
{ n(是同一个
点! } else
{ n(是一个点,CD
是一个点,且AC不同! }
return 0; } if ((b.y - a.y) +
(b.x - a.x) == 0) { if ((a.x - d.x) * (c.y
- d.y) - (a.y - d.y) * (c.x - d.x) == 0)
{ n(、B是一个点,且
在CD线段上! } else
{ n(、B是一个点,且
不在CD线段上! } return
0; } if ((d.y - c.y) +
(d.x - c.x) == 0) { if ((d.x - b.x) * (a.y
- b.y) - (d.y - b.y) * (a.x - b.x) == 0)
{ n(、D是一个点,且
在AB线段上! } else
{ n(、D是一个点,且
不在AB线段上! } return
0; } if ((b.y - a.y) * (c.x - d.x) - (b.x -
a.x) * (c.y - d.y) == 0) { n(线
段平行,无交点! return 0; }
intersection.x = ((b.x - a.x) * (c.x - d.x) * (c.y - a.y) -
c.x * (b.x - a.x) * (c.y - d.y) + a.x * (b.y - a.y) * (c.x - d.x))
((b.y - a.y) * (c.x - d.x) - (b.x - a.x) * (c.y - d.y));
intersection.y = ((b.y - a.y) * (c.y - d.y) * (c.x - a.x) - c.y
* (b.y - a.y) * (c.x - d.x) + a.y * (b.x - a.x) * (c.y - d.y))
((b.x - a.x) * (c.y - d.y) - (b.y - a.y) * (c.x - d.x));
if ((intersection.x - a.x) * (intersection.x - b.x) <= 0
&& (intersection.x - c.x) * (intersection.x - d.x) <=
0 && (intersection.y - a.y) *
(intersection.y - b.y) <= 0 &&
(intersection.y - c.y) * (intersection.y - d.y) <= 0)
{ n(线段相
交于点(!
return 1; '相交 } else
{ n(线段相交于虚交点(
intersection.x + !
return -1; '相交但不在线段上 } } }



========================下面是找 到的另外的一种方
法====================


第二种方法: 利用斜率公式, 直线方程为ax+bx+c=0, 先求
出a,b,c, 然后再求出交点 Java代码


public static void main(String[] args) { Point2D p1 = new
(10, 20); Point2D p2 = new
(100, 200); Point2D p3 = new
(50, 20); Point2D p4 = new
(20, 100); Param pm1 =
CalParam(p1, p2); Param pm2 = CalParam(p3, p4);
Point2D rp = getIntersectPoint(pm1, pm2);
n(他们的交点为: (
() + } ** * 计算两点的直线方程的参数
a,b,c * @param p1 * @param p2 * @return * public
static Param CalParam(Point2D p1, Point2D p2){ double
a,b,c; double x1 = (), y1 = (), x2 =
(), y2 = (); a = y2 - y1; b = x1 - x2;
c = (x2 - x1) * y1 - (y2 - y1) * x1; if (b < 0)
{ a *= -1; b *= -1; c *= -1; }else if (b == 0
&& a < 0) { a *= -1; c *= -1; }
return new Param(a, b, c); } ** * 计算两条直线的交
点 * @param pm1 * @param pm2 * @return * public
static Point2D getIntersectPoint(Param pm1, Param
pm2){ return getIntersectPoint(pm1.a, pm1.b, pm1.c,
pm2.a, pm2.b, pm2.c); } public static Point2D
getIntersectPoint(double a1, double b1, double c1, double a2,
double b2, double c2){ Point2D p = null; double m
= a1 * b2 - a2 * b1; if (m == 0) { return
null; } double x = (c2 * b1 - c1 * b2) m;
double y = (c1 * a2 - c2 * a1) m; p = new
(x, y); return p; } 输出的结果为:
Java代码


求出该直线方程为: y=2.0x + -0.0 求出该直线方程为:
y=-2.6666666666666665x + 153.33333333333334 他们的交
点为: (32.8574,65.771) 他们的交
点为: (32.8574,65.771)

高考录取批次-快彩乐首页


航天航空大学有哪些-形成酸雨的主要气体


商务英语专业就业前景-记叙文描写


毛坦厂中学为什么出名-靠谱是什么意思


中国政治制度-辅音音标


维语学习-我国的政权组织形式


网上报名参军-国内最好航空公司排名


今年高考语文作文-磁感传感器



本文更新与2020-09-30 19:38,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/409083.html

两条线段是否相交,计算交点公式的相关文章

  • 余华爱情经典语录,余华爱情句子

    余华的经典语录——余华《第七天》40、我不怕死,一点都不怕,只怕再也不能看见你——余华《第七天》4可是我再也没遇到一个像福贵这样令我难忘的人了,对自己的经历如此清楚,

    语文
  • 心情低落的图片压抑,心情低落的图片发朋友圈

    心情压抑的图片(心太累没人理解的说说带图片)1、有时候很想找个人倾诉一下,却又不知从何说起,最终是什么也不说,只想快点睡过去,告诉自己,明天就好了。有时候,突然会觉得

    语文
  • 经典古训100句图片大全,古训名言警句

    古代经典励志名言100句译:好的药物味苦但对治病有利;忠言劝诫的话听起来不顺耳却对人的行为有利。3良言一句三冬暖,恶语伤人六月寒。喷泉的高度不会超过它的源头;一个人的事

    语文
  • 关于青春奋斗的名人名言鲁迅,关于青年奋斗的名言鲁迅

    鲁迅名言名句大全励志1、世上本没有路,走的人多了自然便成了路。下面是我整理的鲁迅先生的名言名句大全,希望对你有所帮助!当生存时,还是将遭践踏,将遭删刈,直至于死亡而

    语文
  • 三国群英单机版手游礼包码,三国群英手机单机版攻略

    三国群英传7五神兽洞有什么用那是多一个武将技能。青龙飞升召唤出东方的守护兽,神兽之一的青龙。玄武怒流召唤出北方的守护兽,神兽之一的玄武。白虎傲啸召唤出西方的守护兽,

    语文
  • 不收费的情感挽回专家电话,情感挽回免费咨询

    免费的情感挽回机构(揭秘情感挽回机构骗局)1、牛牛(化名)向上海市公安局金山分局报案,称自己为了挽回与女友的感情,被一家名为“实花教育咨询”的情感咨询机构诈骗4万余元。

    语文