/* 1059. Exocenter of a Trian题目大意: 给出三角形ABC三点坐标,如图所示,作正方形ABDE,正方形BCHJ,正方形CAGF,L为DG中点,M为EJ中点,N为FH中点,直线LA,MB,NC交于同一点O,求点O的坐标。其实O就是其垂心思路:1、先通过向量旋转分别得到D、G、F、H,由于求两直线交点只需两条直线即可,所以EJ不用求。(向量旋转90) 2、求DG中点L和FH中点N,然后求直线LA和NC的交点3、这里求两直线交点有三种情况 1.LA无斜率  2.NC无斜率 3.都有斜率
*/#include<iostream>
#include<cmath>
#include<stdlib.h>
#include<stdio.h>
using namespace std;
const double PI = 3.1415926535897932384626433832795;
const double eps = 1e-8;int dcmp(double x){return x < -eps ? -1 : x > eps ;}double fix(double x){if(dcmp(x)==0)return 0;return x;
}struct Point {double x, y;Point() {}Point(double x0, double y0): x(x0), y(y0) {}
};double operator*(Point p1, Point p2) // 计算叉乘 p1 × p2
{return (p1.x * p2.y - p2.x * p1.y);
}
Point operator-(Point p1, Point p2)
{return Point(p1.x - p2.x, p1.y - p2.y);
}
Point operator+(Point p1, Point p2)
{return Point(p1.x + p2.x, p1.y + p2.y);
}
Point Rotate(Point p, double angle)
{Point result;result.x = p.x * cos(angle) - p.y * sin(angle);result.y = p.x * sin(angle) + p.y * cos(angle);return result;}
double Area(Point A, Point B, Point C) //三角形面积
{return ((B-A)*(C-A) / 2.0);
}
//无斜率
Point withoutSlop(double x, Point p1, Point p2 ){double k = (p1.y- p2.y)/(p1.x - p2.x);double b = p1.y  - k * p1.x;Point result;result.x = x;result.y = x * k + b;return result;}//都有斜率 Point withSlop(Point p1, Point p2, Point p3, Point p4){double k1 = (p1.y- p2.y)/(p1.x - p2.x);double b1 = p1.y  - k1 * p1.x;double k2 = (p3.y- p4.y)/(p3.x - p4.x);double b2 = p3.y  - k2 * p3.x;Point result;result.x = (b1-b2)/(k2-k1);result.y = k1 * result.x + b1;return result;}//求直线交点 Point intersection(Point p1,Point p2,Point p3,Point p4){Point result;//浮点数绝对值为fabs,整数为abs if(fabs(p1.x - p2.x) < eps)result = withoutSlop(p1.x, p3,p4);elseif(fabs(p3.x-p4.x) < eps)result = withoutSlop(p3.x, p1,p2);elseresult = withSlop(p1,p2,p3,p4);return result;}int main(){int T, cas;Point A, B, C;scanf("%d",&T);for(cas = 0; cas < T; cas++){scanf("%lf%lf",&A.x, &A.y);scanf("%lf%lf",&B.x, &B.y);scanf("%lf%lf",&C.x, &C.y);if(Area(A,B,C) < 0)swap(B,C);Point D, G, F, H, L, N, ans;//如向量AB=(B-A),旋转90后,变成AD=(D-A); 所以D = Rotate(B-A,-PI/2) + A D = Rotate(B - A,-PI/2) + A;G = Rotate(C - A, PI/2) + A;L = (D + G);L.x/=2; L.y/=2;F = Rotate(A - C,-PI/2) + C;H = Rotate(B - C, PI/2) + C;N = (F + H);N.x/=2; N.y/=2;ans = intersection(A, L, C, N);printf("%.4lf %.4lf\n",fix(ans.x), fix(ans.y));}system("pause");return 0;}

Sicily.1059. Exocenter of a Trian(求垂心,向量旋转)相关推荐

  1. matlab求两向量夹角_高考数学解题技巧:专题21 平面向量中最值、范围问题高中数学黄金解题模板...

    ↑ 点击上方"红色笔记"关注我们 高中各科解题技巧下载  回复数字:800009 高考数学解题技巧:专题24 数列求和方法高中数学黄金解题模板 高考数学解题技巧:专题26 含参不等 ...

  2. MATLAB笔记5:矩阵的转置、求逆、旋转、翻转;矩阵的行列式、秩、迹;矩阵的特征值、特征向量

    矩阵的转置.求逆.旋转.翻转 inv(A):求矩阵A的逆矩阵: 转置:A.'为矩阵A的转置,A'为矩阵A的共轭转置: rot90(A,k):将矩阵A逆时针方向旋转90°的k倍,k为1时可省略: fli ...

  3. OpenGL(C++):求两向量角平分线

    前提条件:两向量起点在同一个点 设两向量分别为OA⃗\vec{OA}OA和OB⃗\vec{OB}OB,起点均在OOO点. 主要思想: 将OA⃗\vec{OA}OA和OB⃗\vec{OB}OB单位化,假 ...

  4. matlab 计算逆时针夹角,求取向量A逆时针到向量B的夹角

    算法思路:通过余弦定理求取向量夹角的cosa,然后判断夹角是否大于180,如果大于,则向量夹角为360-arccosa*180/Pi(单位为°):否则夹角为arccosa*180/Pi.(Pi为常量3 ...

  5. python二维向量公式坐标叉乘_Python 或 sage 有没有哪个函数可以求指定向量的模?进行点乘运算,叉乘运算。...

    Hlianbobo:python 或 sage 有没有哪个函数可以求指定向量的模?进行点乘运算,叉乘运算?求相关的库名称已经代码示例,谢谢! zhzy:numpy Tony042:numpy,或者自己 ...

  6. poj pku 1673 EXOCENTER OF A TRIANGLE 三角形 垂心

    [b][color=blue]题目描述:[/color][/b][url]http://poj.org/problem?id=1673[/url][size=large][/size] 该题重点是求证 ...

  7. matlab求两向量夹角_高中数学《平面向量的数量积》说课稿

    高中数学<平面向量的数量积>说课稿 作为一位无私奉献的人民教师,有必要进行细致的说课稿准备工作,借助说课稿可以让教学工作更科学化.那么写说课稿需要注意哪些问题呢?以下是小编为大家收集的高中 ...

  8. 求一个向量变换为另一个向量的矩阵_OpenGL里旋转等变换矩阵为什么是4x4的矩阵...

    OpenGL ES 的很多教程里都会有这样一个例子来讲解纹理:将一张图片作为纹理显示在屏幕上. 因为纹理坐标和实际屏幕显示的坐标不一样,把图片渲染在屏幕上后,图片是上下颠倒的. 一个解决方法是对当前的 ...

  9. Uva 11178 Morley's Theorem 向量旋转+求直线交点

    http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=9 题意: Morlery定理是这样的:作三角形ABC每个 ...

最新文章

  1. C++拾趣——有趣的操作符重载
  2. 用leangoo怎么做迭代管理?(Sprint Backlog、任务看板、燃尽图)
  3. 我看过的C++方面的好文章
  4. multiprocessing python_Python多线程/进程(threading、multiprocessing)知识覆盖详解
  5. 021 设计模式之工厂方法模式,抽象工厂模式的区别
  6. xshell连不上虚拟机linux的解决办法(用的默认NAT模式)
  7. 编写可维护的JavaScript之避免使用全局变量
  8. 网易严选宣布退出双11?
  9. 承包你所有壁纸需求,高图网图片,美到窒息
  10. 剑指 Offer II 108. 单词演变
  11. SQL语句处理一些修改、新增、删除、修改属性操作(MySql)
  12. RIP/EIGRP/OSPF/ISIS使用的端口号/协议号
  13. svg和css3创建环形渐变进度条
  14. python提取二值栅格上边界和中线
  15. python下载,python依赖下载(用镜像),python依赖手动下载安装
  16. 用RIO包健壮地读写
  17. SolidWorks
  18. 深藏功与名!献给学弟学妹的“Java核心面试知识笔记”
  19. ISO9001标准文档模版-测试计划
  20. 带瀑布流的电钢琴_‎App Store 上的“完美钢琴”

热门文章

  1. Android 图片处理工具类汇总
  2. Objective-C类别(catagory)
  3. 【目标检测】Receptive Field Block Net for Accurate and Fast Object Detection论文理解
  4. 盘点Hadoop生态圈:13个让大象飞起来的开源工具
  5. vim 退格键(backspace)不能用
  6. 形式化方法-- petri net
  7. 小技巧(2):谷歌网盘容量15G不够用?不科学上网谷歌网盘下载速度太慢?试一下这个“Google teamdrive开通”+“GDIndex链接Google Drive”
  8. java 默认打印机_JavaScript代码 设置默认打印机!
  9. 网易互联网产品运营管培生面试经历--从群面到终面面试经验分享
  10. 解决ping值波动,一下20ms,一下上千ms的问题。