日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

POJ1269:Intersecting Lines(判断两条直线的关系)

發(fā)布時(shí)間:2025/7/25 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 POJ1269:Intersecting Lines(判断两条直线的关系) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目:POJ1269

題意:給你兩條直線的坐標(biāo),判斷兩條直線是否共線、平行、相交,若相交,求出交點(diǎn)。

思路:直線相交判斷、如果相交求交點(diǎn)。

首先先判斷是否共線,之后判斷是否平行,如果都不是就直接求交點(diǎn)了。

#include <iostream> #include <string.h> #include <stdio.h> #include <algorithm> #include <math.h> #include <queue> #define inf 0x3f3f3f3f #define eps 1e-9 typedef long long ll; using namespace std; int n; struct Point {double x,y; }; struct Line {Point a,b; } line[3]; double xmult(Point p1,Point p2,Point p)//叉積 {return (p1.x-p.x)*(p2.y-p.y)-(p1.y-p.y)*(p2.x-p.x); } int parallel(Line u,Line v) {return ((u.a.x-u.b.x)*(v.a.y-v.b.y)-(v.a.x-v.b.x)*(u.a.y-u.b.y)); } Point intersection(Line u,Line v) {Point ret=u.a;double t=((u.a.x-v.a.x)*(v.a.y-v.b.y)-(u.a.y-v.a.y)*(v.a.x-v.b.x))/((u.a.x-u.b.x)*(v.a.y-v.b.y)-(u.a.y-u.b.y)*(v.a.x-v.b.x));ret.x+=(u.b.x-u.a.x)*t;ret.y+=(u.b.y-u.a.y)*t;return ret; } int main() {while(scanf("%d",&n)!=EOF){cout<<"INTERSECTING LINES OUTPUT"<<endl;for(int i=0; i<n; i++){scanf("%lf%lf%lf%lf%lf%lf%lf%lf",&line[1].a.x,&line[1].a.y,&line[1].b.x,&line[1].b.y,&line[2].a.x,&line[2].a.y,&line[2].b.x,&line[2].b.y);if(fabs(parallel(line[1],line[2]))<=eps&&fabs(xmult(line[1].a,line[1].b,line[2].a))<=eps){printf("LINE\n");}else if(fabs(parallel(line[1],line[2]))<=eps){printf("NONE\n");}else{Point tt=intersection(line[1],line[2]);printf("POINT %.2f %.2f\n", tt.x,tt.y);//poj只能輸出f }}printf("END OF OUTPUT\n");}return 0; }

?轉(zhuǎn)載:

給你兩條直線,判斷這兩條直線是否共線,相交,不相交(即平行),相交的話輸出交點(diǎn)。

判斷平行,然后通過叉積判斷是否共線。

平行判斷可以判斷兩條直線的斜率是否相等。

交點(diǎn)的話,相當(dāng)于聯(lián)立方程組求解了。

這些方程看模板理解的,剛才搜了下,有人講得比較清楚,借鑒下http://blog.csdn.net/dreamvyps/archive/2011/01/25/6162690.aspx

如何判斷是否同線?由叉積的原理知道如果p1,p2,p3共線的話那么(p2-p1)X(p3-p1)=0。因此如果p1,p2,p3共線,p1,p2,p4共線,那么兩條直線共線。direction()求叉積,叉積為0說明共線。

?

如何判斷是否平行?由向量可以判斷出兩直線是否平行。如果兩直線平行,那么向量p1p2、p3p4也是平等的。即((p1.x-p2.x)*(p3.y-p4.y)-(p1.y-p2.y)*(p3.x-p4.x))==0說明向量平等。

?

如何求出交點(diǎn)?這里也用到叉積的原理。假設(shè)交點(diǎn)為p0(x0,y0)。則有:

(p1-p0)X(p2-p0)=0

(p3-p0)X(p2-p0)=0

展開后即是

(y1-y2)x0+(x2-x1)y0+x1y2-x2y1=0

(y3-y4)x0+(x4-x3)y0+x3y4-x4y3=0

將x0,y0作為變量求解二元一次方程組。

假設(shè)有二元一次方程組

a1x+b1y+c1=0;

a2x+b2y+c2=0;

那么

x=(c1*b2-c2*b1)/(a2*b1-a1*b2);

y=(a2*c1-a1*c2)/(a1*b2-a2*b1);

因?yàn)榇颂巸芍本€不會(huì)平行,所以分母不會(huì)為0。//就是斜率,已懂

轉(zhuǎn)載于:https://www.cnblogs.com/zhangmingcheng/p/4278507.html

總結(jié)

以上是生活随笔為你收集整理的POJ1269:Intersecting Lines(判断两条直线的关系)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。