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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lkj345/article/details/78375862

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

这里写图片描述

由上图可知(引用自博客),当点( X 0 X_0 , Y 0 Y_0 )旋转 θ \theta 之后的坐标可以由下面的公式推出。

(1) [ X Y ] = [ c o s θ s i n θ s i n θ c o s θ ] [ X 0 Y 0 ] \begin{bmatrix} X \\ Y \end{bmatrix} = \begin{bmatrix} cos\theta & sin \theta \\ -sin\theta & cos\theta \\ \end{bmatrix} \begin{bmatrix} X_0 \\ Y_0 \end{bmatrix}\tag{1}

由此分析,当已知A和B两点,向量 A B \vec AB B \vec B - A \vec A ,将向量 A B \vec AB 以A为中心旋转 6 0 60^\circ 后得到的向量 A C \vec AC 的终点C便是我们要求的第三点坐标(这句话有点长,慢慢读,很好理解)。
(2) [ X C Y C ] = [ X A Y A ] + [ c o s θ s i n θ s i n θ c o s θ ] [ X A B Y A B ] \begin{bmatrix} X_C \\ Y_C \end{bmatrix}= \begin{bmatrix} X_A \\ Y_A \end{bmatrix}+ \begin{bmatrix} cos\theta & sin \theta \\ -sin\theta & cos\theta \\ \end{bmatrix} \begin{bmatrix} X_{AB} \\ Y_{AB} \end{bmatrix}\tag{2}

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

% 根据旋转矩阵求等边三角形第三点坐标
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 \vec AB 朝另一个方向旋转 6 0 60^\circ 便可得到另一个顶点,即将程序中的 6 0 60^\circ 改为 6 0 -60^\circ 即可,得到的坐标是(-2.062,6.232)。
vec

猜你喜欢

转载自blog.csdn.net/lkj345/article/details/78375862