程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> CodeForces 23D Tetragon 給定凸四邊形3條同邊長的中點求4個頂點 計算幾何

CodeForces 23D Tetragon 給定凸四邊形3條同邊長的中點求4個頂點 計算幾何

編輯:C++入門知識

題目鏈接:點擊打開鏈接

題意:

給定3個二維平面上的點

這3個點是一個凸四邊形的其中3個中點 且所在的3條邊邊長相等

問是否存在這樣的四邊形,若存在則輸出四邊形頂點


思路:

那個外面的點是一個中點關於另一個中點對稱得到的 \

然後得到一個圓的2條弦,圓心就是4個頂點之一,剩下對稱出來即可<喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+PGltZyBzcmM9"http://www.2cto.com/uploadfile/Collfiles/20140703/20140703091352182.jpg" alt="\">

#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
#define ST 1001     
#define EN 1002     
#define M 10000     
#define inf 1000000     
#define eps 1e-8     
#define PR 1e-8  
#define node Point
struct Point{//點是2維的     
    double x,y;    
}p[50],aa[3],ans[4];    
    
double Cross(Point p1,Point p2,Point p3,Point p4){//二維向量(p1p2)X(p3p4) 返回第三向量長度     
    double x1=p2.x-p1.x,y1=p2.y-p1.y;    
    double x2=p4.x-p3.x,y2=p4.y-p3.y;    
    return x1*y2-x2*y1; //為0表示 p1p2 與p3p4共線     
    //直線:不為0就是相交     
}        
bool On_Segment(Point p1,Point p2,Point p3){//p3點在 p1p2線段上     
    if(Cross(p1,p2,p1,p3)!=0)return false;    
    bool iny=(p1.y<=p3.y && p3.y<=p2.y)||(p1.y>=p3.y && p3.y>=p2.y);    
    bool inx=(p1.x<=p3.x && p3.x<=p2.x)||(p1.x>=p3.x && p3.x>=p2.x);    
    if(inx && iny)return true;    
    return false;    
}    
bool Segmentintersect(Point p1,Point p2,Point p3,Point p4){//p1p2 是否與 p3p4相交     
    double cross_1=Cross(p3,p4,p3,p1),cross_2=Cross(p3,p4,p3,p2);//cross_1 2必須一正一負且都不為0     
    double cross_3=Cross(p1,p2,p1,p3),cross_4=Cross(p1,p2,p1,p4);//cross_2 4必須一正一負且都不為0     
    //表示a線段 2點 在b線段 2側     
    if(cross_1*cross_2<0 && cross_3*cross_4<0)return true;    
    
    //a線段端點在 b線段上 視情況取捨這種位置      
//  if(cross_1==0 && On_Segment(p3,p4,p1))return true;     
//  if(cross_2==0 && On_Segment(p3,p4,p2))return true;     
//  if(cross_3==0 && On_Segment(p1,p2,p3))return true;     
//  if(cross_4==0 && On_Segment(p1,p2,p4))return true;     
    return false;    
}
#define N 105
#define eps 1e-8
double Abs(double x){return x>0?x:-x;}
bool equal(double a,double b){return Abs(a-b)


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