• 帮 论坛朋友解决的问题。


    思路:

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

      

  • 相关阅读:
    采用C/C++语言如何实现复数抽象数据类型Complex
    单链表的插入伪算法和用C语言创建单链表,并遍历
    SQL多列查询最大值
    修改网页页面显示内容
    成为智者的四个敌人——唐望
    从0到1:构建强大且易用的规则引擎(转)
    身份采集、活体检测、人脸比对...旷视是如何做FaceID的? (转)
    drools -Rete算法(转)
    风控决策引擎系统的搭建设计指南(转载)
    [上市与资本运作] 【干货】创业公司天使轮、A轮、B轮……IPO融资时如何分配股权?(转载)
  • 原文地址:https://www.cnblogs.com/gaitian00/p/2203723.html
Copyright © 2020-2023  润新知