A,B,C三点一个三角形
A是直角顶点;AB,AC两边与X,Y轴不平行;
知道AB,AC,BC的长度,知道A,B的坐标,求C得坐标;
谁知道呀,感觉是中学数学,但是本人忘光了;只找到一个”根据两点坐标得到长度”的公式写出2个2元2次方程,
(Xc – Xa) * (Xc – Xa) + (Yc – Ya) * (Yc – Ya) = AC * AC
(Xc – Xb) * (Xc – Xb) + (Yc – Yb) * (Yc – Yb) = BC * BC
但是解出来验证不对;
谁有更好的办法,不要说数学原理,看不懂;谁帮忙写个算法
A是直角顶点;AB,AC两边与X,Y轴不平行;
知道AB,AC,BC的长度,知道A,B的坐标,求C得坐标;
谁知道呀,感觉是中学数学,但是本人忘光了;只找到一个”根据两点坐标得到长度”的公式写出2个2元2次方程,
(Xc – Xa) * (Xc – Xa) + (Yc – Ya) * (Yc – Ya) = AC * AC
(Xc – Xb) * (Xc – Xb) + (Yc – Yb) * (Yc – Yb) = BC * BC
但是解出来验证不对;
谁有更好的办法,不要说数学原理,看不懂;谁帮忙写个算法
解决方案
10
参考《高中数学》三角函数
10
公式是对的,肯定是你实现的问题,精度损失什么的
10
这样算的话,原因是计算机计算过程中会出现 截断的过程,全部 计算机算的值与精确值 之间是存在一定的误差的,全部 像是用数学问题来编程时,一般都要给两者一定的误差值!
10
可以先求直角三角形旋转到与XY轴平行的角度和新的C点坐标,然后再把坐标旋转回去。
大致是这样的(没有验证,错了不要怪本人):
angle = arcsin((Xa – Xb) / AB)
Xc” = Xa + AC
Yc” = Ya
Xc = cos(angle) * Xc” – sin(angle) * Yc”;
Yc = cos(angle) * Yc” + sin(angle) * Xc”;
大致是这样的(没有验证,错了不要怪本人):
angle = arcsin((Xa – Xb) / AB)
Xc” = Xa + AC
Yc” = Ya
Xc = cos(angle) * Xc” – sin(angle) * Yc”;
Yc = cos(angle) * Yc” + sin(angle) * Xc”;