程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> HDU 1086 You can Solve a Geometry Problem too(判斷線段相交)

HDU 1086 You can Solve a Geometry Problem too(判斷線段相交)

編輯:C++入門知識

HDU 1086 You can Solve a Geometry Problem too(判斷線段相交)


題目地址:HDU 1086

就這麼一道僅僅判斷線段相交的題目寫了2k多B的代碼。。是不是有點浪費。。。但是我覺得似乎哪裡也優化不了了。。。。

判斷線段相交就是利用的叉積。假如現在兩條線段分別是L1和L2,先求L1和L2兩個端點與L1的某個端點的向量的叉積,如果這兩個的叉積的乘積小於0的話,說明L1在是在L2兩個端點之間的,但此時並不保證一定相交。此時需要用同樣的方法去判斷L2是否在L1的兩個端點之間,如果L2也在L1的兩個端點之間的話,那就足以說明L1與L2相交。但是這題還需要判斷是否端點也相交,當時沒想到這點,導致白白調了一段時間。。至於端點的判斷,我也沒想到什麼好的方法。。就直接暴力判斷4個端點是否是同一點的情況。。

搓代碼如下:

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

using namespace std;
#define eqs 1e-10
struct node
{
    double x, y;
} point[1000];
node xiang(node a, node b)
{
    node f1;
    f1.x=a.x-b.x;
    f1.y=a.y-b.y;
    return f1;
}
int cross(node a, node b)
{
    double c;
    c= a.x*b.y-a.y*b.x;
    if(c>0)
        return 1;
    else if(c==0)
        return 0;
    else
        return -1;
}
int dcmp(double x, double y)
{
    if(fabs(x-y)<=eqs)
        return 1;
    return 0;
}
int main()
{
    int n, i, j;
    int c1, c2, c3, c4, ans;
    while(scanf("%d",&n)!=EOF&&n)
    {
        ans=0;
        for(i=0; i

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved