POJ 1269 求两直线交点

题意:给出4个点,两个一组在两条直线上,求出这两条直线的重合部分,NONE就是平行,LINE就是重合,POINT就是有交点并且输出交点。

解析几何那么求,没什么好说的直接看代码吧。

#include <iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
typedef double PointType;
struct point
{
    PointType x,y;
};
point jd;
int Jiaodian(point a,point b,point c,point d)//平行返回0 重合返回1 相交返回2
{
    double A1=b.y-a.y,A2=d.y-c.y,B1=a.x-b.x,B2=c.x-d.x;
    double C1=b.y*(b.x-a.x)-b.x*(b.y-a.y),C2=d.y*(d.x-c.x)-d.x*(d.y-c.y);
    if(A1*B2==B1*A2)//平行或重合
    {
        if(A2*C1==A1*C2&&B1*C2==B2*C1)
            return 1;
        return 0;
    }
    jd.x=(B1*C2-B2*C1)/(B2*A1-B1*A2);
    jd.y=(A1*C2-A2*C1)/(A2*B1-A1*B2);
    return 2;
}
int main()
{
    point a,b,c,d;
    int n;
    puts("INTERSECTING LINES OUTPUT");
    scanf("%d",&n);
    while(n--)
    {
        scanf("%lf%lf%lf%lf%lf%lf%lf%lf",&a.x,&a.y,&b.x,&b.y,&c.x,&c.y,&d.x,&d.y);
        int ans=Jiaodian(a,b,c,d);
        if(ans==0)
            puts("NONE");
        else if(ans==1)
            puts("LINE");
        else
            printf("POINT %.2f %.2f\n",jd.x,jd.y);
    }
    puts("END OF OUTPUT");
    return 0;
}
时间: 2024-11-02 23:25:40

POJ 1269 求两直线交点的相关文章

JAVA求两直线交点和三角形内外心的方法_java

一.求两直线交点 复制代码 代码如下: class Point {    double x;    double y;     public Point() {        this.x = 0;        this.y = 0;    }}class Line {    Point a;    Point b;     public Line() {        this.a = new Point();        this.b = new Point();    }    //求

求两直线交点和三角形内外心

一.求两直线交点 class Point { double x; double y; public Point() { this.x = 0; this.y = 0; } } class Line { Point a; Point b; public Line() { this.a = new Point(); this.b = new Point(); } //求两直线的交点,斜率相同的话res=u.a Point intersection(Line u,Line v){ Point res

HDU 4741 空间几何求两直线距离最近点

给出两直线经过的两点,没有平行的情况,求两直线最短距离和最短距离的两点. #include <iostream> #include <string.h> #include <stdio.h> #include <math.h> using namespace std; const double eps = 1e-8; //三维空间点 struct Point { double x, y, z; Point(double x=0,double y=0,doub

WORD中如何在相交的直线交点上画上圆点

问题:WORD中如何在相交的直线交点上画上圆点?有没有什么工具能够实现? 解答:先选中画贺工具.把鼠标的指针尖放在两条相交的直线的交点上然后按住Ctrl和Shift键就可以画出圆点.最好是放大来画这样会更精确. 其中Ctrl的作用是从中心向外扩散.要是画直线,会从线中心同时向两边扩展.Shift键的作用是画正圆.正方形用的.也能画出以45度角的直线.你可以试一下.

如何求两个数组的交集

题目意思大概是这样的:给定两个大数组(1w以上1亿以下),用最有效的方法找出来两个数组的交集. 对于这道题,我有一个思路就是,先对数组进行排序,然后用两个指针在已排序的数组上轮流指向头结点,进行比较. 比较亮的地方,就是在于这个比较的方式了. 首先,比较的时候,要先确定两个指针指向的内用是否一致.如果一致,那么这个点,就是交集的一个元素,没问题吧? 这里有一个问题就是,接下来如何比较? 步骤是这样的:先比较两个指针指向内容的大小,指向结果小的指针,开始递增,直到较小的指针指向的值大于或等于另一个

最古老的算法:辗转相除法(求两个自然数最大公约数)

在数学界,辗转相除法,又称欧几里得算法,被认为是世界上最早的算法(公元前300年),该算法用于求两个最大公约数的算法.辗转相除法首次出现于欧几里得的<几何原本>(第VII卷,命题yⅠ和Ⅱ)中,而在中国则可以追溯至东汉出现的<九章算术>. 两个自然数的最大公约数是能够同时整除它们的最大的正整数.辗转相除法基于如下原理:两个整数的最大公约数等于其中较小的数和两数的相除余数的最大公约 数.例如,1254和390的最大公约数是6(1254 = 6 × 209:390 = 6 × 65):用

php求两个目录的相对路径示例

 这篇文章主要介绍了php求两个目录的相对路径示例(php获取相对路径),需要的朋友可以参考下 求两个目录的相对路径,不限制路径深度    代码如下: /**  * 输出$b相对于$a的相对路径($a)  * 不限限制路径深度,没有做什么优化,只是实现功能  */ function getPath($a, $b) {  $aArr = explode('/', dirname($a));  $bArr = explode('/', dirname($b));    $aLen = count($

算法 数据结构-求两个数最大公约数,欧几里得算法

问题描述 求两个数最大公约数,欧几里得算法 求两个数最大公约数,欧几里得算法,这两种方法除第一种可以避免除数为零的情况,两者有什么区别?谢谢 public static int gcd(int p, int q) { if (q == 0) return p; int r = p % q; return gcd(q, r) ; } public static int gcd(int p, int q) { int r = p % q; if (r == 0) return q; return g

要求时间复杂度为O(n)的求两个位置之间最大值的算法

问题描述 要求时间复杂度为O(n)的求两个位置之间最大值的算法 把一串数(32位int型)放到Num中,求begin和end位置使得begin与end之间的是数字和最大,要求时间复杂度是O(n). 注:不可以先排序,这串数字的位置不能改变. 最好有源码,思路也可以. 解决方案 #include #include int getmax(int first, int second) { return first > second ? first : second; } int main() { in