题目:http://poj.org/problem?id=1269

相关知识:

叉积
求面积:https://www.cnblogs.com/xiexinxinlove/p/3708147.html
什么是叉积:https://blog.csdn.net/sunbobosun56801/article/details/78980467
        其二维:https://blog.csdn.net/qq_38182397/article/details/80508303
计算交点:
    方法1:面积的比例:https://blog.csdn.net/dgq8211/article/details/7952825
    方法2:叉积:https://blog.csdn.net/hktkfly6/article/details/69218777
            (其原因:https://www.jianshu.com/p/3468c9967fc7
例题:POJ1269:https://www.xuebuyuan.com/1979631.html

此题的链接使用的就是那个面积比例的方法。但自己不是很懂,所以用了那个另一种方法。

利用面积算交点坐标应该还可以:https://www.cnblogs.com/Narh/p/9663099.html

  设直线有两个参数:p->起点坐标;t->终点坐标减起点坐标。设有线段 a 和 b 。设交点为 r 。

  double d=( (a.p-b.p)×a.t ) / ( b.t×a.t ) ,r = a.p + d * a.t ;

  那个 d 就是面积比,即交点与一条线段的相对该线段起点的坐标值之比。

    画一画,分子就是三角形面积的两倍,分母是那样的平行四边形的面积,但连一下发现它就是两线交叉的那个四边形的面积的两倍。面积比即高的比即那两段线段之比。

关于这种方法的 a、b、c 怎么算,可以这样想:y=k*x+b 又 a*x+b*y+c=0 ,所以 a : b : c = -k : 1 : b;

  已知一条直线的两个点的坐标,联立可得 k=( y1-y2 ) / ( x1-x2 ) ; b=( x1*y2 - y1*x2 ) / ( x1-x2 ) ;

  所以 a : b : c = ( y2-y1) : ( x1-x2 ) : ( x1*y2 - y1*x2 ) 。可以说它们就等于这个,因为另一侧是0,可以随便乘。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define db double
using namespace std;
int T,tx,ty;
struct Pt{
db x,y;
Pt(db x=,db y=):x(x),y(y) {}
}ta,tb;
struct Line{
Pt p,t;
}a,b;
int operator* (const Pt &a,const Pt &b)
{return a.x*b.y-a.y*b.x;}
Pt operator- (const Pt &a,const Pt &b)
{return Pt(a.x-b.x,a.y-b.y);}
int check(Line a,Line b)
{
int d1=(b.p-a.p)*(a.t-a.p);
int d2=(b.t-a.p)*(a.t-a.p);
if(!d1&&!d2) return -;//line
if(d1==d2) return ;//none
if(d1*d2<=) return ;//point ==0 for 端点相交
}
Pt find(Line a,Line b)
{
db x1=a.p.x,y1=a.p.y,x2=a.t.x,y2=a.t.y;
db a0=y2-y1,b0=x1-x2,c0=y1*x2-x1*y2;
x1=b.p.x,y1=b.p.y,x2=b.t.x,y2=b.t.y;
db a1=y2-y1,b1=x1-x2,c1=y1*x2-x1*y2;
int tmp=a0*b1-a1*b0;
return Pt((b0*c1-b1*c0)/tmp,(-a0*c1+a1*c0)/tmp);
}
int main()
{
scanf("%d",&T);
puts("INTERSECTING LINES OUTPUT");
while(T--)
{
scanf("%d%d",&tx,&ty); ta=Pt(tx,ty);
scanf("%d%d",&tx,&ty); tb=Pt(tx,ty);
a.p=ta; a.t=tb;
scanf("%d%d",&tx,&ty); ta=Pt(tx,ty);
scanf("%d%d",&tx,&ty); tb=Pt(tx,ty);
b.p=ta; b.t=tb;
int d=check(a,b);
if(d==-) puts("LINE");
else if(d==) puts("NONE");
else
{
printf("POINT ");
Pt c=find(a,b);
printf("%.2lf %.2lf\n",c.x,c.y);
}
}
puts("END OF OUTPUT");
return ;
}

poj 1269 Intersecting Lines——叉积求直线交点坐标的更多相关文章

  1. POJ 1269 Intersecting Lines【判断直线相交】

    题意:给两条直线,判断相交,重合或者平行 思路:判断重合可以用叉积,平行用斜率,其他情况即为相交. 求交点: 这里也用到叉积的原理.假设交点为p0(x0,y0).则有: (p1-p0)X(p2-p0) ...

  2. POJ 1269 Intersecting Lines(判断两直线位置关系)

    题目传送门:POJ 1269 Intersecting Lines Description We all know that a pair of distinct points on a plane ...

  3. 判断两条直线的位置关系 POJ 1269 Intersecting Lines

    两条直线可能有三种关系:1.共线     2.平行(不包括共线)    3.相交. 那给定两条直线怎么判断他们的位置关系呢.还是用到向量的叉积 例题:POJ 1269 题意:这道题是给定四个点p1, ...

  4. poj 1269 Intersecting Lines

    题目链接:http://poj.org/problem?id=1269 题目大意:给出四个点的坐标x1,y1,x2,y2,x3,y3,x4,y4,前两个形成一条直线,后两个坐标形成一条直线.然后问你是 ...

  5. POJ 1269 - Intersecting Lines - [平面几何模板题]

    题目链接:http://poj.org/problem?id=1269 Time Limit: 1000MS Memory Limit: 10000K Description We all know ...

  6. ●POJ 1269 Intersecting Lines

    题链: http://poj.org/problem?id=1269 题解: 计算几何,直线交点 模板题,试了一下直线的向量参数方程求交点的方法. (方法详见<算法竞赛入门经典——训练指南> ...

  7. POJ 1269 Intersecting Lines(直线求交点)

    Description We all know that a pair of distinct points on a plane defines a line and that a pair of ...

  8. POJ 1269 Intersecting Lines(直线相交判断,求交点)

    Intersecting Lines Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 8342   Accepted: 378 ...

  9. poj 1269 Intersecting Lines(判断两直线关系,并求交点坐标)

    Intersecting Lines Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 12421   Accepted: 55 ...

随机推荐

  1. 关于 php 调用 其他语言写的Web Service SOAP 接口的参数传递问题

    关于 php 调用 其他语言写的Web Service SOAP 接口的参数传递问题,有需要的朋友可以参考下. php调用java写的soap接口经验:   场景一: java是以数组的形式接收参数的 ...

  2. 【WPF学习笔记】之如何传递第一个登录界面的值到下一个页面显示:动画系列之(三)

    ... ... 承接系列(二) 在之前的登录后台已设置发送到主界面: 在主界面接收传递的值: using System; using System.Collections.Generic; using ...

  3. 创业做移动互联网App的4个注意事项

    导语:大多数人对于做App还是比較盲目,有个想法立刻就去做了.做出来了才忽然想到市场和推广.我把做移动 互联网App注意事项情给大家列下. 文| 移动互联网李建华 近 来,常常有人问我关于推广的事情, ...

  4. WPF自定义搜索框代码分享

    首先下载搜索图标: 控件中的搜索图标下载地址:http://www.easyicon.net/1183666-Search_icon.html 搜索框设计过程比较简单: 1.先定义一个Rectangl ...

  5. WCF: 以Json格式返回对象

    1.先建一个WCF Service 建一个ServiceContract接口 1 [ServiceContract] public interface IJsonWCFService { /// &l ...

  6. Android UI开发第四十三篇——使用Property Animation实现墨迹天气3.0引导界面及动画实现

    前面写过<墨迹天气3.0引导界面及动画实现>,里面完美实现了动画效果,那一篇文章使用的View Animation,这一篇文章使用的Property Animation实现.Propert ...

  7. Linux的经常使用命令(1) - 指定执行级别

    命令:init [0123456] 执行级别 0:关机 1:单用户 2:多用户状态没有网络服务 3:多用户状态有网络服务 4:系统未使用保留给用户 5:图形界面 6:系统重新启动 经常使用执行级别是3 ...

  8. java.lang.NoSuchMethodError: org.jboss.logging.Logger.getMessageLogger(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Object;

    spring3_hibernate 集成报错信息 java.lang.NoSuchMethodError: org.jboss.logging.Logger.getMessageLogger(Ljav ...

  9. WCP源码分析 与SpringMVC学习资料

    1.在一个稍大的项目中,通常会有上百个组件,如果这些组件采用xml的bean定义来配置,显然会增加配置文件的体积,查找以及维护起来也不太方便. Spring2.5为我们引入了组件自动扫描机制,他可以在 ...

  10. 更精炼更专注的RTMPClient客户端EasyRTMPClient,满足直播、转发、分析等各种需求

    现状 EasyRTMPClient,熟悉的朋友就会联想到EasyRTSPClient项目(https://github.com/EasyDSS/EasyRTSPClient),EasyRTSPClie ...