已知等边三角形两点,求第三点坐标

来源:互联网 发布:淘宝怎么交电话费 编辑:程序博客网 时间:2024/05/18 17:05

本文不是针对几何公式推导,而是针对在编写程序过程中遇到的实际问题,所以打算只求出符合要求的等边三角形中的一个即可。在阅读生成平均脸的过程中,需要求出以两只眼为两点的等边三角形的另外一点的坐标。

这里写图片描述

由上图可知(引用自博客),当点(X0,Y0)旋转θ之后的坐标可以由下面的公式推出。

[XY]=[cosθsinθsinθcosθ][X0Y0](1)

由此分析,当已知A和B两点,向量A⃗ BB⃗  - A⃗ ,将向量A⃗ B以A为中心旋转60后得到的向量A⃗ C的终点C便是我们要求的第三点坐标(这句话有点长,慢慢读,很好理解)。
[XCYC]=[XAYA]+[cosθsinθsinθcosθ][XABYAB](2)

于是便有如下matlab代码,其中红色的线表示向量A⃗ B,绿色的线表示向量B⃗ C,蓝色的线表示向量C⃗ A

% 根据旋转矩阵求等边三角形第三点坐标A = [3; 1]; %可任意修稿B = [5; 8]; % 可任意修改AB = B - A;theta = deg2rad(60);T = [cos(theta) sin(theta); -sin(theta) cos(theta)];C = A + T*AB; % 核心旋转程序lines = [A'; B'; C'; A'];hold on;plot(lines([1 2], 1), lines([1 2], 2), 'r');plot(lines([2 3], 1), lines([2 3], 2), 'g');plot(lines([3 1], 1), lines([3 1], 2), 'b');axis equal

结果如下图,点(3,1)和(5,8)已知,另外一个点的坐标是(10.062,2.768),同理只要将向量A⃗ B朝另一个方向旋转60便可得到另一个顶点,即将程序中的60改为60即可,得到的坐标是(-2.062,6.232)。
vec

阅读全文
0 0