思路:
/*
--根据题意 已知道A B 两点坐标 AB和BC的角度
--已知道 AC BC 的距离 求c点坐标
--如图
--***** 解释******
--我们把题 放到max 的顶视图考虑 (就是相当于一个二维坐标系中进行)
--通过审题 可以知道C点有两个,分别在线段AB的两边。这个问题我们就看图中
--先考虑其中的一边,并且为了方便我把它放到了第一象限内。
---如图做了一些辅助线。
---如图如果求C点坐标 其实就是求 OE EC 的长度
---进一步推导 要想求出他们的长度 知道知道 OC 的长度 还有角COE 就可以通过三角函数求出来。
---1.求角CBD
--因为A B 坐标知道 所以就知道了OG GA OF FB 的长度 根据勾股定理可以知道 OA OB 长度
--(其实max 已经提供了测量向量的长度的函数 :length )--用什么样的办法都是可以的。
--这样在三角形AOB 中 我们能求出三条边的分别的长度。
--我们就可以求出任意一个角
--******** 公式********
cos(角)= (任意两个相邻向量的点乘)/(任意两个相邻向量的摸的乘)
--这样我们就知道了角ABO
角CBD=角ABO(已经求出)-角ABC(题中已经给出来)
----到此 求出来角CBD
---2.求出 BD DC 的长度
在直角三角形 BCD中 知道了角CBD 知道了BC 的长度用三角函数可以 求出任意一边的长度
BD= cos(角CBD)*BC
DC= sin(角CBD)*BC
-----到此我们求出的 BD DC 的长度
----3.把问题转移到直角三角形COD 中进行解决
--如图:
OD=OB(上面已经求出是点B 的模长)-DB(上面已经求出)
所以OD 就能求出来 。DC 在上面已经求出来
所以在直角三角形COD 用勾股定理可以求出来OC的长度。
OC= 根号下(OD*OD+DC*DC)
----至此就求出来OC的长度 下来我们只要知道 角COE 就能解答我们的问题。
----4 求角COE
--看图可知到
角COE= 角COD +角BOF
---求角COD
角COD= acos(OD/OC)
---至此求出角COD
求角BOF
角BOF =acos(OF/OB)
角BOF =acos((B.x)/(点B的模长))
---因为
角COE= 角COD +角BOF
--所以求出来角COE
----5. 最后求C点坐标
OE= cos(角COE)*OC
EC= sin(角COE)*OC
所以C点坐标为 [OE,EC]
---至此完成
--实验测试 A= getKnotPoint $ 1 1 --[65.4353,83.0255,0] B= getKnotPoint $ 1 2 --[134.646,19.2272,0] ---下面是要求的的c坐标我在这里先列出来 C=getKnotPoint $ 1 3 --[40.4573,11.9613,0] ---求角CBD A_length = length A ---这里为什么直接求长度 是因为另一个点是原点 --A_length=105.712 B_length=length B ---B_length=136.012 ---角ABC -- AB BC 的长 length_AB = length( A-B) length_BC=length(B-C) xiangliang_AB =A-B xiangliang_BC=C-B xiangling_OB= [0,0,0]-B ABC = acos ( (dot xiangliang_AB xiangliang_BC )/(length_AB*length_BC)) --ABC =47.0811 ---上面虽然是我算出来的,但是是题目中已知道的。 -- 求角AOB AOB= acos ((dot A B)/(A_length*B_length)) ---AOB=43.6304 --求角ABO ABO = acos ((dot xiangliang_AB xiangling_OB)/( length_AB*B_length)) --ABO=50.7968 --求角CBD CBD =ABO-ABC --求DC的长 sin(CBD)=CD/BC CD =sin(CBD)*BC CD=sin(CBD)*length_BC ---CD=6.12204 --求DB 的长 cos(CBD)=DB/BC DB =cos(CBD)*length_BC --DB=94.2697 --OD=OB-DB OD=B_length-DB --OD=41.7421 ---在直角三角形OCD中 知道OD CD 求斜边 OC=sqrt(OD*OD+CD*CD) --OC=42.1887 ---在直角三角形 OCE 中 要想求的 OE的长(C点的x坐标)EC的长(C点的y坐标) ---需要知道角COE COE=COD+BOF COD= acos (OD/OC) --COD=8.34367 --这里是角度 --BOF=acos(OF/OB) BOF=acos((B.x)/B_length) --BOF=8.12739 COE=COD+BOF --COE=16.4711 OE=cos(COE)*OC --OE=40.4574 --************************这个就是求出来的x轴 和实际差0.0001 (这个在max中算是很精确了) EC=sin(COE)*OC --EC=11.9618 --求出c点坐标 C=[OE,EC] --C=[40.4574,11.9618] 和上面相符 成功