1. 程式人生 > >LA 4413 Triangle Hazard 梅涅勞斯定理的應用

LA 4413 Triangle Hazard 梅涅勞斯定理的應用

題目地址:pdf版本

比如說求A,我們知道了向量PR ,只需要求出PA/PR的值,就知道向量PA,這樣加上P就可以求出A。

關於比例的計算,用到梅涅勞斯定理  純平面幾何內容。

然後簡化計算時,用到了輪換對稱性,減少程式碼量。

程式碼:

#include<iostream>
#include<cmath>
#include<cstdio>
#include<algorithm>
const double eps=1e-10;
const double PI=acos(-1);

using namespace std;


struct Point{
    double x;
    double y;
    Point(double x=0,double y=0):x(x),y(y){}
    void operator<<(Point &A) {cout<<A.x<<' '<<A.y<<endl;}
};

int dcmp(double x)  {return (x>eps)-(x<-eps); }

typedef  Point  Vector;

Vector  operator +(Vector A,Vector B) { return Vector(A.x+B.x,A.y+B.y);}

Vector  operator -(Vector A,Vector B) { return Vector(A.x-B.x,A.y-B.y); }

Vector  operator *(Vector A,double p) { return Vector(A.x*p,A.y*p);  }

Vector  operator /(Vector A,double p) {return Vector(A.x/p,A.y/p);}

// ps  cout

ostream &operator<<(ostream & out,Point & P) { out<<P.x<<' '<<P.y<<endl; return out;}

bool  operator< (const Point &A,const Point &B) { return A.x<B.x||(A.x==B.x&&A.y<B.y); }

bool  operator== ( const Point &A,const Point &B) { return dcmp(A.x-B.x)==0&&dcmp(A.y-B.y)==0;}


double  Dot(Vector A,Vector B) {return A.x*B.x+A.y*B.y;}

double  Cross(Vector A,Vector B)  {return A.x*B.y-B.x*A.y; }

double  Length(Vector A)  { return sqrt(Dot(A, A));}


double  Angle(Vector A,Vector B) {return acos(Dot(A,B)/Length(A)/Length(B));}

double  Area2(Point A,Point B,Point C ) {return Cross(B-A, C-A);}

Vector Rotate(Vector A,double rad) { return Vector(A.x*cos(rad)-A.y*sin(rad),A.x*sin(rad)+A.y*cos(rad));}
Vector Normal(Vector A) {double L=Length(A);return Vector(-A.y/L,A.x/L);}

Point GetLineIntersection(Point P,Vector v,Point Q,Vector w)
{
    Vector u=P-Q;
    double t=Cross(w, u)/Cross(v,w);
    return P+v*t;
    
}

double DistanceToLine(Point P,Point A,Point B)
{
    Vector v1=P-A; Vector v2=B-A;
    return fabs(Cross(v1,v2))/Length(v2);
    
}

double DistanceToSegment(Point P,Point A,Point B)
{
    if(A==B)  return Length(P-A);
    
    Vector v1=B-A;
    Vector v2=P-A;
    Vector v3=P-B;
    
    if(dcmp(Dot(v1,v2))==-1)    return  Length(v2);
    else if(Dot(v1,v3)>0)    return Length(v3);
    
    else return DistanceToLine(P, A, B);
    
}

Point GetLineProjection(Point P,Point A,Point B)
{
    Vector v=B-A;
    Vector v1=P-A;
    double t=Dot(v,v1)/Dot(v,v);
    
    return  A+v*t;
}

bool  SegmentProperIntersection(Point a1,Point a2,Point b1,Point b2)
{
    double c1=Cross(b1-a1, a2-a1);
    double c2=Cross(b2-a1, a2-a1);
    double c3=Cross(a1-b1, b2-b1);
    double c4=Cross(a2-b1, b2-b1);
    
    //cout<<c1<<c2<<c3<<c4<<endl;
    return dcmp(c1)*dcmp(c2)<0&&dcmp(c3)*dcmp(c4)<0 ;
    
}

bool  OnSegment(Point P,Point A,Point B)
{
    return dcmp(Cross(P-A, P-B))==0&&dcmp(Dot(P-A,P-B))<0;
}

double PolygonArea(Point *p,int n)
{
    double area=0;
    
    for(int i=1;i<n-1;i++)
    {
        area+=Cross(p[i]-p[0], p[i+1]-p[0]);
        
    }
    return area/2;
    
}

Point  read_point()
{
    Point P;
    scanf("%lf%lf",&P.x,&P.y);
    return  P;
}

Point getA(Point P,Point Q,Point R,double a,double b,double c)
{
    double r1=a*b/(a*b+1+a);
    double r2=(c*(a+1))/(1+c*(a+1));
    
    double r=(1-r1)/(1-r1-r2);
    Vector PA=(R-P)*r;
    return PA+P;
}


int main()
{
    int T;
    cin>>T;
    Point A,B,C,P,Q,R;
    double m[6];
    double a,b,c;
    while(T--)
    {
        P=read_point();
        Q=read_point();
        R=read_point();
        for(int i=0;i<6;i++)
        {
            cin>>m[i];
        }
        
        a=m[0]/m[1];
        b=m[2]/m[3];
        c=m[4]/m[5];
    
        A=getA(P, Q, R, a, b, c);
        B=getA(Q,R,P,b,c,a);
        C=getA(R,P,Q,c,a,b);
        
        printf("%.8lf %.8lf %.8lf %.8lf %.8lf %.8lf\n",A.x,A.y,B.x,B.y,C.x,C.y);
        
    }
   
}


相關推薦

LA 4413 Triangle Hazard 定理應用

題目地址:pdf版本 比如說求A,我們知道了向量PR ,只需要求出PA/PR的值,就知道向量PA,這樣加上P就可以求出A。 關於比例的計算,用到梅涅勞斯定理  純平面幾何內容。 然後簡化計算時,用到了輪換對稱性,減少程式碼量。 程式碼: #include<iostre

LA 4413 定理

#include <bits/stdc++.h> using namespace std; struct Point { double x, y; Point(double x = 0, double y = 0): x(x), y(y) {} }; typ

uvalive 4413(定理)

題意:如圖所示,給出P、Q、R三點的座標,AB、BC、AC被點F、D、E劃分成m1:m2、m3:m4、m5:m6,給出m1~m6的數值,求△ABC的三個頂點A、B、C的座標。 題解:根據梅涅勞斯定理,如果有兩個三角形是這樣組成的: 結論:(BD/DC

Routh-Hurwitz Criterion 穩定判據

處理方法 函數 -m 要求 case 運用 進行 滿足 不同 Routh-Hurwitz Criterion 為什麽僅僅要有一個極點在右半平面,那麽系統就不會穩定? 比如H(s) =( 1/(s+1) ) * ( 1/(

F1歷屆車隊冠軍榜:賽德奪得五連冠

11月29日訊息,@北京商報從度小滿金融人士處獲悉,百度正式拿到准許經營證券期貨的許可證。據許可證顯示,機構名稱為北京百度百盈科技有限公司(下稱“百度百盈”),證券期貨業務經營範圍為基金銷售。而今年8月22日,根據北京證監局官網顯示,證監局已核准百度百盈證券投資基金銷售業務資格。 企查查資訊顯示,百度百盈成

F1巴西站正賽成績表/積分榜 賽德鎖定雙冠

11月29日訊息,@北京商報從度小滿金融人士處獲悉,百度正式拿到准許經營證券期貨的許可證。據許可證顯示,機構名稱為北京百度百盈科技有限公司(下稱“百度百盈”),證券期貨業務經營範圍為基金銷售。而今年8月22日,根據北京證監局官網顯示,證監局已核准百度百盈證券投資基金銷售業務資格。 企查查資訊顯示,百度百盈成

判據的證明及應用

本文在word上編輯後貼上而來,本文中提及的勞斯判據證明方法不是從赫爾維茨判據而來,而是依據參考文獻1做出的證明,其中與國內教材不同的勞斯表也已做出證明。 補充:後來又做了這個系統的超前滯後校正,貼

演算法------赫爾維茨(Routh-Hurwitz)穩定判據(轉)

判別系統穩定性最基本的方法是根據特徵方程式的根的性質來判定。但求解高於三階的特徵方程式相當複雜和困難。所以在實際應用中提出了各種工程方法,它們無需求特徵根,但都說明了特徵根在複平面上的分佈情況,從而判別系統的穩定性。本節主要介紹代數判據。 (一) 系統穩定性的初步判別 設已知控制系統的特徵方程 式中所有係

【模版】盧卡定理

https 常用 分享 for 模版 組合 ron 技術分享 scan 給定n,m,p 求 (m改為n) C表示組合數。 一個測試點內包含多組數據。 輸入輸出格式 輸入格式: 第一行一個整數T,表示數據組數 第二行開始共T行,每行三個數n m p,意義如上 輸出格式: 共T

bzoj 2111: [ZJOI2010]Perm 排列計數 (dp+盧卡定理

dir code def -1 text eight clu 階乘 typedef bzoj 2111: [ZJOI2010]Perm 排列計數 1 ≤ N ≤ 10^6, P≤ 10^9 題意:求1~N的排列有多少種小根堆 1: #i

洛谷——P3807 【模板】盧卡定理

|| turn thml 數據 mod text clu -h eset P3807 【模板】盧卡斯定理 題目背景 這是一道模板題。 題目描述 給定n,m,p(1\le n,m,p\le 10^51≤n,m,p≤10?5??) 求 C_{n+m}^{m

【學習筆記】盧卡定理

namespace style pan set thml color 怎麽辦 alt fontsize 洛谷 P3807 【模板】盧卡斯定理 題目背景 這是一道模板題。 題目描述 給定n,m,p(1\le n,m,p\le 10^51≤n,m,p≤10?5??) 求 C_{

洛谷 P3807 【模板】盧卡定理

cnblogs col define 包含 main radius adg log lag 題目背景 這是一道模板題。 題目描述 給定n,m,p(1\le n,m,p\le 10^51≤n,m,p≤105) 求 C_{n+m}^{m}\ mod\ pCn

Codeforces 451E Devu and Flowers【容斥原理+盧卡定理

d+ 題意 while markdown post mark 色相 esp printf 題意:每個箱子裏有\( f[i] \)種顏色相同的花,現在要取出\( s \)朵花,問一共有多少種顏色組合 首先枚舉\( 2^n \)種不滿足條件的情況,對於一個不被滿足的盒子,我們至

bzoj 1951: [Sdoi2010]古代豬文 【中國剩余定理+歐拉定理+組合數學+盧卡定理

amp == pri pla 質因數分解 b+ return ons gcd 首先化簡,題目要求的是 \[ G^{\sum_{i|n}C_{n}^{i}}\%p \] 對於乘方形式快速冪就行了,因為p是質數,所以可以用歐拉定理 \[ G^{\sum_{i|n}C_{n}^{

洛谷.3807.[模板]盧卡定理(Lucas)

lin 不同 階乘 markdown return ++ down .org .com 題目鏈接 Lucas定理 日常水題...sublime和C++字體死活不同步怎麽辦... //想錯int範圍了...不要被longlong坑 //這個範圍現算階乘比預處理快得多 #i

極大似然估計與貝葉定理

lan 說明 概率論 可能性 聯合 訓練樣本 對數 www. 條件 文章轉載自:https://blog.csdn.net/zengxiantao1994/article/details/72787849 極大似然估計-形象解釋看這篇文章:https://www.zhihu

淺談盧卡定理

smi tdi 能夠 char 快速 get through for 除法取模 前幾天gryz組織我們聽了幾天數論,蒟蒻 Nanjo_Qi 自然是聽得一點問題也沒有。 於是只能自己yy著學一點其他的數學的東西,正巧在那之前剛剛學會盧卡斯定理,於是現在就來水一篇博客。 其實是

Bayes' theorem (貝葉定理)

也有 事件 ike 之前 誤差 另一個 nor 條件 一次 前言   AI時代的到來一下子讓人感覺到數學知識有些捉襟見肘,為了不被這個時代淘汰,我們需要不斷的學習再學習。其中最常見的就是貝葉斯定理,這個定理最早由托馬斯·貝葉斯提出。   貝葉斯方法的誕生源於他生前為解決一

洛谷P2480 [SDOI2010]古代豬文(盧卡定理+中國剩余定理

res moto mina spa through 剩余定理 合數 tex pac 傳送門 好吧我數學差的好像不是一點半點…… 題目求的是$G^{\sum_{d|n}C^d_n}mod\ 999911659$ 我們可以利用費馬小定理$