帮 论坛朋友解决的问题。

思路:

/*
--根据题意 已知道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] 和上面相符 成功

  

原文地址:https://www.cnblogs.com/gaitian00/p/2203723.html