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)×(CE/EA)×(AF/FB)=1

证明省略,直接运用结论,在题中所给的三角形中有6组这样的三角形,分别可以推出后面两个边的比值:

△CBQ 和 △CDR —-> DP / CQ

△BAP 和 △BFQ —-> FR / BP

△ACR 和 △APE —-> QE / AR

△CBE 和 △CDA —-> DP / PA

△BAD 和 △BFC —-> FR / CR

△ACF 和 △AEB —-> EQ / BQ

设DP为x,就能把全部边都表示成关于x的式子,最后推回DP,就是一个关于x的一元一次方程,直接解方程就得到的DP的长度,进而所有边的长度都可以求得,为了得到A、B、C的坐标,让点R在向量PR的方向上移动AR的距离就得到了A,其余两点类似得出。

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
const double PI = acos(-1);
const double eps = 1e-9;
struct Point {
    double x, y;
    Point(double a = 0, double b = 0): x(a), y(b) {}
};
typedef Point Vector;
double dcmp(double x) {
    if (fabs(x) < eps)
        return 0;
    return x < 0 ? -1 : 1;
}
Vector operator + (const Point& A, const Point& B) {
    return Vector(A.x + B.x, A.y + B.y);
}
Vector operator - (const Point& A, const Point& B) {
    return Vector(A.x - B.x, A.y - B.y);
}
Vector operator * (const Point& A, double a) {
    return Vector(A.x * a, A.y * a);
}
Vector operator / (const Point& A, double a) {
    return Vector(A.x / a, A.y / a);
}
double Cross(const Vector& A, const Vector& B) {
    return A.x * B.y - A.y * B.x;
}
double Dot(const Vector& A, const Vector& B) {
    return A.x * B.x + A.y * B.y;
}
double Length(const Vector& A) {
    return sqrt(Dot(A, A));
}
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 A.x == B.x && A.y == B.y;
}

Point P, Q, R;
double m1, m2, m3, m4, m5, m6; 

int main() {
    int t;
    scanf("%d", &t);
    while (t--) {
        scanf("%lf%lf%lf%lf%lf%lf", &P.x, &P.y, &Q.x, &Q.y, &R.x, &R.y);
        scanf("%lf%lf%lf%lf%lf%lf", &m1, &m2, &m3, &m4, &m5, &m6);
        double RP = Length(P - R);
        double RQ = Length(R - Q);
        double PQ = Length(P - Q);
        double t1 = m1 * RP / (m1 + m2) / RQ; // DP / CQ
        double t2 = m5 * RQ / (m5 + m6) / PQ; // FR / BP
        double t3 = m3 * PQ / (m3 + m4) / RP; // QE / AR
        double t4 = m1 * m3 / (m1 + m2) / m4; // DP / PA
        double t5 = m1 * m5 / (m5 + m6) / m2; // FR / CR
        double t6 = m3 * m5 / (m3 + m4) / m6; // EQ / BQ
        double DP = (t4 * RP + t6 * t4 * PQ / t3 + t6 * t5 * t4 * RQ / t3 / t2) / (1 - t6 * t5 * t4 / t3 / t2 / t1);
        double AR = DP / t4 - RP;
        Point A = R + (R - P) * (AR / RP);
        double BP = t5 / t2 * (DP / t1 + RQ);
        Point B = P + (P - Q) * (BP / PQ);
        double CQ = DP / t1;
        Point C = Q + (Q - R) * (CQ / RQ);
        printf("%.8lf %.8lf %.8lf %.8lf %.8lf %.8lf\n", A.x, A.y, B.x, B.y, C.x, C.y);
    }
    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-18 09:23:02

uvalive 4413(梅涅劳斯定理)的相关文章

UVa 11437 (梅涅劳斯定理) Triangle Fun

题意: 给出三角形ABC顶点的坐标,DEF分别是三边的三等分点.求交点所形成的三角形PQR的面积. 分析: 根据梅涅劳斯定理,我们得到: ,解得 另外还有:,解得 所以AR : RP : PD = 3 : 3 : 1 同理,BE和CF也被分成这样比例的三段. △ADC = (2/3)△ABC △CDR = (4/7)△ADC △CPR = (3/4)△CDR △PQR = (1/2)△CPR 所以:△PQR = (1/7)△ABC 1 #include <cstdio> 2 #include

训练日志2

这几天主要是在打比赛 计算几何写了一些推公式的题 UVALive 4413 相当于按比例 构造出一种小三角形 想求原来的大三角形 这道题用到了 梅涅劳斯定理 链接 简单来说就是一条过三角形三边所在直线的直线 有 AD * BE * CF = BD * CE * AF 证明也比较简单 应用到这题就是由三条直线和三个小三角形得到三个方程 解出来对应比例就可以了 POJ 2208 给你四面体六条边 求体积 欧拉四面体公式 链接 写的时候也并没有用公式 直接建系 也是可以算的 UVA 11524 给你一

计算几何题目分类

转载 一.基础题目 1.1 有固定算法的题目 A, 最近点对问题最近点对问题的算法基于扫描线算法.ZOJ 2107    Quoit Design    典型最近点对问题POJ    3714    Raid    变种最近点对问题 B,最小包围圆最小包围圆的算法是一种增量算法,期望是O(n).ZOJ    1450    Minimal Circle  HDU    3007    Buried memory C,旋转卡壳POJ 3608    Bridge Across Islands   

ACM学习历程—HDU5476 Explore Track of Point(平面几何)(2015上海网赛09题)

Problem Description In Geometry, the problem of track is very interesting. Because in some cases, the track of point may be beautiful curve. For example, in polar Coordinate system,ρ=cos3θ is like rose, ρ=1−sinθ is a Cardioid, and so on. Today, there

几何基础专题

UVA 11437 Triangle Fun UVA 11800 Determine the Shape 四边形判定 UVA 11646 Athletics Track UVA 11817 Tunnelling the Earth 球面距离 UVA 1473 Dome of Circus UVA 11524 InCircle UVA 11731 Ex-circles 旁切圆 UVA 12300 Smallest Regular Polygon UVA 10566 Crossed Ladders

UVA LIVE-4413 - Triangle Hazard

给个图,告诉R,P,Q三点的坐标,求出A,B,C三点的坐标 我的做法: 根据梅涅劳斯定理列出三个二元一次方程组,求出pb,qc,ra的长度,然后用点位移求出A,B,C三点的坐标即可 我的代码: #include<iostream> #include<map> #include<string> #include<cstring> #include<cstdio> #include<cstdlib> #include<cmath&g

平面几何

最近我改行当一个数竞党,其实我本来就是搞数学的. 做了一天的CMO,感觉呼吸困难. 平面几何大概就是一堆三角形和一些圆之间的激情故事... 先贴一下我们的定理们,很多很毒瘤(难度大概有分先后) 勾股定理 摄影定理 摄影定理的逆定理及其推论 三角形的五心(很多,不再展开) 含有特殊角的三角形性质 三角形的分角线 张角定理 狭义托勒密定理 狭义托勒密定理的推论 广义托勒密定理 婆罗摩几多定理 鸡爪定理 鸭爪定理 角平分线定理 狭义塞瓦定理 塞瓦定理逆定理的推论 梅涅劳斯定理 梅涅劳斯定理逆定理的推论

UVA 12165 Triangle Hazard

https://cn.vjudge.net/problem/UVA-12165 题目 给出D.E.F分BC,CA,AB的比$m_1:m_2$,$m_3:m_4$,$m_5:m_6$和PQR三点的坐标,求ABC三点的坐标 题解 利用梅涅劳斯定理,找出直线和三边的交点,然后每个边按顺序乘下去 可以写出三个方程 \[\frac{AR}{RP}\cdot\boxed{\frac{PQ}{QB}}\cdot\frac{BF}{FA}=1\] \[\frac{BP}{PQ}\cdot\boxed{\frac

Unity5 GI与PBS渲染从用法到着色代码

本文主要介绍Untiy5以后的GI,PBS,以及光源探头,反射探头的用法以及在着色器代码中如何发挥作用,GI是如何影响渲染的,主要分成三个部分,最开始说明PBS需要的材质与相应概念,二是Unity 里相应GI的操作,三是对应着色器代码的理解.如果没有特殊声明,所有操作与代码都是针对Unity5.3. PBS材质与概念 简单来说,PBS的优点不同的照明下获得一致的外观,更容易实现,更直观的参数. PBS材质概念: 1.albedo 反照率 反照率贴图定义漫反射的基本颜色,与原来的漫反射贴图相比,不