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{QR}{RC}}\cdot\frac{CD}{DB}=1\]
\[\frac{CQ}{QR}\cdot\boxed{\frac{RP}{PA}}\cdot\frac{AE}{EC}=1\]
然后得到
\[\frac{AR}{RP}\cdot\frac{PQ}{PQ+BP}=\frac{m5}{m6}=k_1\]
\[\frac{BP}{PQ}\cdot\frac{QR}{QR+RC}=\frac{m1}{m2}=k_2\]
\[\frac{CQ}{QR}\cdot\frac{RP}{RP+RA}=\frac{m3}{m4}=k_3\]
最后解
\[x_1=k_1(1+x_2)\]
\[x_2=k_2(1+x_3)\]
\[x_3=k_3(1+x_4)\]
然后点加向量就可以得出三点坐标
AC代码
#include<cstdio>
#include<cctype>
#include<cmath>
#define REP(r,x,y) for(register int r=(x); r<(y);r++)
#ifdef sahdsg
#define DBG(...) printf(__VA_ARGS__)
#else
#define DBG(...) (void)0
#endif
using namespace std; int _s; char _c;
template <class T>
inline void read(T&x) {
x=0;
do _c=getchar(); while(!isdigit(_c) && _c!='-');
_s=1;
if(_c=='-') _s=-1, _c=getchar();
while(isdigit(_c)) { x=x*10+_c-'0'; _c=getchar();} x*=_s;
}
template<class T, class...A> inline void read(T &x, A&...a){read(x); read(a...);} #define D point
#define CD const D
struct point {
double x,y;
void read() {scanf("%lf%lf",&x,&y);}
void prn() {printf("%.8lf %.8lf",x,y);}
};
D operator+(CD&l, CD&r) {return (D){l.x+r.x,l.y+r.y};}
D operator-(CD&l, CD&r) {return (D){l.x-r.x,l.y-r.y};}
D operator/(CD&l,double a) {return (D){l.x/a,l.y/a};}
D operator*(CD&l,double a) {return (D){l.x*a,l.y*a};}
D operator*(double a, CD &l) {return (D){l.x*a,l.y*a};}
double cross(CD&l, CD&r) {return l.x*r.y-l.y*r.x;}
D intersec(CD&a, D b, CD&c, D d) {
b=b-a; d=d-c; D u=a-c;
double t = cross(d, u) / cross(b,d);
return a+b*t;
}
#undef CD
#undef D
point P,Q,R,A,B,C;
#define x1 nvdsaokvl
#define x2 nvkjdavnf
#define x3 vmasdvddz
int m1,m2,m3,m4,m5,m6;
double k1,k2,k3,x1,x2,x3;
int main() {
int N; read(N);
while(0<N--) {
P.read(); Q.read(); R.read();
read(m1,m2,m3,m4,m5,m6);
k1=(double)m5/m6, k2=(double)m1/m2, k3=(double)m3/m4;
double t=1-k1*k2*k3;
x1=(k1+k1*k2*k3+k1*k2)/t;
x2=(k2+k1*k2*k3+k2*k3)/t;
x3=(k3+k1*k2*k3+k1*k3)/t;
DBG("%lf %lf %lf\n", x1,x2,x3);
A=x1*(R-P)+R;
B=x2*(P-Q)+P;
C=x3*(Q-R)+Q;
A.prn();putchar(' ');
B.prn();putchar(' ');
C.prn();putchar('\n');
}
return 0;
}
UVA 12165 Triangle Hazard的更多相关文章
- uva 11401 Triangle Counting
// uva 11401 Triangle Counting // // 题目大意: // // 求n范围内,任意选三个不同的数,能组成三角形的个数 // // 解题方法: // // 我们设三角巷的 ...
- UVa 488 - Triangle Wave
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=94&page=s ...
- UVa 11437:Triangle Fun(计算几何综合应用,求直线交点,向量运算,求三角形面积)
Problem ATriangle Fun Input: Standard Input Output: Standard Output In the picture below you can see ...
- UVA 11401 - Triangle CountingTriangle Counting 数学
You are given n rods of length 1,2, . . . , n. You have to pick any 3 of them and build a triangle. ...
- UVA 488 - Triangle Wave 水~
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...
- UVA 11437 - Triangle Fun 向量几何
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...
- 简单几何(求交点) UVA 11437 Triangle Fun
题目传送门 题意:三角形三等分点连线组成的三角形面积 分析:入门题,先求三等分点,再求交点,最后求面积.还可以用梅涅劳斯定理来做 /********************************** ...
- uva 11437 - Triangle Fun
计算几何: 直线交点: #include<cstdio> using namespace std; struct node { double x,y; node(,):x(x),y(y){ ...
- 【递推】【组合计数】UVA - 11401 - Triangle Counting
http://blog.csdn.net/highacm/article/details/8629173 题目大意:计算从1,2,3,...,n中选出3个不同的整数,使得以它们为边长可以构成三角形的个 ...
随机推荐
- mysql 排它锁之行锁、间隙锁、后码锁
MySQL InnoDB支持三种行锁定 行锁(Record Lock):锁直接加在索引记录上面,锁住的是key. 间隙锁(Gap Lock):锁定索引记录间隙,确保索引记录的间隙不变.间隙锁是针对事务 ...
- 老师傅珍藏多年CAD常用快捷键合集,收藏,工作效率翻倍!
想要熟练操作CAD,做一名出色的CAD绘图员,少不了勤学苦练,还要掌握一些常用的绘图命令以及常用快捷键. 今天就来跟大家分享超全的CAD绘图命令,以及常用快捷键,学会涨工资! 常用快捷键: CTRL快 ...
- Android 监听手机锁屏的工具类
自定义 ScreenListener package com.example.teagardenhd.Listener; import android.content.BroadcastReceive ...
- TYUT程序设计入门第四讲练习题题解--数论入门
程序设计入门第四讲练习题题解--数论入门 对于新知识点的学习,需要不断地刷题训练,才能有所收获,才能更好地消化知识点. 题组链接: 程序设计入门第四讲练习题--数论 by vjudge 题解: A. ...
- java之instanceof操作符
a intanceof A:判断a是否是类A的的一个实例,返回值为boolean public class Person extends Object{} public class Student e ...
- atom 在Ubuntu 18.04 上安装及基本使用
前记: Atom 是github专门为程序员推出的一个跨平台文本编辑器.具有简洁和直观的图形用户界面,并有很多有趣的特点:支持CSS,HTML,JavaScript等网页编程语言.它支持宏,自动完成分 ...
- go源码解析-Println的故事
本文主要通过平常常用的go的一个函数,深入源码,了解其底层到底是如何实现的. Println Println函数接受参数a,其类型为-interface{}.用过Java的对这个应该比较熟悉,Java ...
- R3环申请内存时页面保护与_MMVAD_FLAGS.Protection位的对应关系
Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html 技术学习来源:火哥(QQ:471194425) R3环申请内存时页 ...
- docker采用Dockerfile安装jdk1.8案例
1 获取一个简单的Docker系统镜像,并建立一个容器. 这里我选择下载CentOS镜像 docker pull centos 通过docker tag命令将下载的CentOS镜像名称换成centos ...
- ThinkPHP中框架查询
1.查询多条数据 1.1静态调用all方法或者select方法 // 获取所有数据 all 和 select $list = User::all(); // 根据主键获取多个数据al ...