V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iguoji
V2EX  ›  程序员

已知扇形边长,角度,圆心点,求另一个角的坐标

  •  
  •   iguoji · 2015-11-09 17:57:37 +08:00 · 5287 次点击
    这是一个创建于 3307 天前的主题,其中的信息可能已经有所发展或是发生改变。

    o
    o
    o
    ooooooooo

    假设上面这个是扇形,(弧度脑补)

    圆心角坐标 X = 300 , Y = 300

    角度为 90 度,边长是 100

    先画左边的线,直接从圆心角画到坐标 X = 300 , Y = 200

    中间的弧不用管,这个时候应该有一个公式知道下面这条横线画到哪里

    求这个公式,公式得出的结果应该是 X = 400 , Y = 300

    同时,我要根据这个扇形依次在右下角,左下角,左上角分别画扇形,最后组成一个圆

    每次的问题都一样,怎么知道另一个角的 X Y 坐标

    求 JS 的公式代码。

    27 条回复    2015-11-12 19:43:53 +08:00
    b821025551b
        1
    b821025551b  
       2015-11-09 18:04:40 +08:00
    原谅我“圆心角”、“圆心”傻傻分不清楚
    xjx0524
        2
    xjx0524  
       2015-11-09 18:08:50 +08:00
    那叫半径。。。
    kokdemo
        3
    kokdemo  
       2015-11-09 18:08:54 +08:00
    需要区分一下角度,这里以锐角为例

    另一个端点的 y 坐标应该 原位置 + r * cos(α)
    xjx0524
        4
    xjx0524  
       2015-11-09 18:11:06 +08:00
    imn1
        5
    imn1  
       2015-11-09 18:28:55 +08:00
    顺时针、逆时针?
    lightening
        6
    lightening  
       2015-11-09 18:59:30 +08:00
    用解析几何,先做个坐标转换,假设圆心坐标 X0 Y0 ,一个角的坐标是 X1 Y1 ,角度 α
    那么以取圆心为新的坐标原点,就有圆心在 (0,0),已知角的坐标是 (x1, y1)。注意转换后坐标是小写的。
    x1 = X1 - X0
    y1 = Y1 - Y0

    然后转换到极坐标
    半径 r = 根号(x1^2 + y1^2)
    角度 θ = arctan(y1/x1)

    然后看你顺时针还是逆时针转,给θ加某个角度(或弧度)。
    φ = θ + α
    然后再反退回直接坐标。

    x2 = r * cos(φ)
    y2 = r * sin(φ)

    别忘了把圆心的偏移加回去(转换回旧的坐标)

    X2 = x2 + X0
    Y2 = y2 + Y0
    zgk
        7
    zgk  
       2015-11-09 19:10:59 +08:00 via Android
    高中数学选修 4-4 极坐标😁
    staticor
        8
    staticor  
       2015-11-09 20:49:33 +08:00
    主要是楼主的描述太影响阅读了... 要不我还是乐意帮忙贡献的....
    iguoji
        9
    iguoji  
    OP
       2015-11-09 21:21:22 +08:00
    @staticor 主要是这里不知道怎么上传图片
    iguoji
        10
    iguoji  
    OP
       2015-11-09 21:24:33 +08:00
    @lightening 感谢你写的,不过我还是没看懂,如果是 JS 代码的话,我想我会很明白。
    MCVector
        11
    MCVector  
       2015-11-09 22:14:40 +08:00
    旋转 + 平移,用矩阵,欧拉角皆可。不过边长是什么?是半径吗?
    lightening
        12
    lightening  
       2015-11-10 05:24:14 +08:00
    @iguoji 把上面的所有步骤写进 js 就可以了,反正已知 X0 Y0 X1 Y1 α,最后得出 X2 Y2 ,所有的中间变量我怎么算出来你也怎么算就行。注意大小写。
    NeoAtlantis
        13
    NeoAtlantis  
       2015-11-10 07:51:33 +08:00 via Android
    看了半天没懂,慰问下楼主的数学和语文老师……
    kiritoalex
        14
    kiritoalex  
       2015-11-10 08:41:42 +08:00 via Android
    @NeoAtlantis 加一
    楼主可以回去看看高中数学选修,现在专门有一本是讲极坐标的
    顺便这表述的问题非常严重,请参考提问的智慧准确描述你的问题
    NeoAtlantis
        15
    NeoAtlantis  
       2015-11-10 08:42:36 +08:00   ❤️ 1


    花了个图示意下……代码绝对不给……
    iguoji
        16
    iguoji  
    OP
       2015-11-10 09:16:53 +08:00
    @NeoAtlantis
    你怎么放图片的?
    看着你的回答,参考我的描述,一边写思路。
    C 在坐标系 XOY 里的圆心,即 C 的坐标是 X = 300 , Y = 300
    AB ,是以 C 为圆心的一个扇形的两点,理解。

    已知 A 点相对于 C 的角度,这个之前没想过
    不是判断 AC 这条线具体该画哪,所以需要知道这个?
    我在具体代码中,会先画 CB 线,顺时针 90°后再画 CA 这条线,所以我是根据 CB 为基础的

    距离,扇形半径 R ,不明白这个的意思
    CB 相对于 CA 的角度,即我描述中的扇形角度 90°

    B 坐标公式里, I 是什么?
    Re^(ia)
    R 空格 e ,是 R 乘以 e 吗, e 又是什么,假设 e=100,i = 200 。
    JS 代码中是不是对应 R*100^(200*a)
    iguoji
        17
    iguoji  
    OP
       2015-11-10 09:27:28 +08:00
    @lightening

    用解析几何,先做个坐标转换,假设圆心坐标 X0 = 300 , Y0 = 300

    一个角的坐标是 X1 = 300 , Y1 = 200 ,角度 α = 90

    那么以取圆心为新的坐标原点,就有圆心在 (0,0),
    已知角的坐标是 (x1, y1)。注意转换后坐标是小写的。

    x1 = 0
    y1 = -100

    然后转换到极坐标 (这里出问题了)
    半径 r = 根号(x1^2 + y1^2)

    半径 r = Math.sqrt(0^2 + -100^2)

    JS 运行得到的结果不是数字, NaN
    NeoAtlantis
        18
    NeoAtlantis  
       2015-11-10 09:37:54 +08:00 via Android
    @iguoji 你只看最后用蓝框标出来的那两个,就是坐标

    i 是虚数单位,上面一堆是推导, js 实现不了
    但是你有必要把 R 和那两个角度自己求出来

    我写的是一般情况, alpha 角就是第一条线和水平的夹角,你的第一条线是水平的, alpha 就是零。

    几何上的角度正表示逆时针,负就是顺时针.
    urmyfaith
        19
    urmyfaith  
       2015-11-10 09:39:53 +08:00
    没有草图,看着好酸爽....
    NeoAtlantis
        20
    NeoAtlantis  
       2015-11-10 09:42:03 +08:00 via Android
    @iguoji 看你 17 楼的代码……说句大实话你别不爱听……

    你的数学、语文、还有 js 的基础都不行……
    这不是光靠网上提问就能搞定的……

    js 里面^不是平方,是异或啊………
    just4test
        21
    just4test  
       2015-11-10 09:43:50 +08:00 via Android
    这完全是三角函数知识有必要上解析几何么。。。。
    NeoAtlantis
        22
    NeoAtlantis  
       2015-11-10 09:49:55 +08:00 via Android
    @just4test 一回事,数学就是工具……没有拿复杂解决简单的说法……

    问题是 V2EX 的水平已经到了这个程度……可叹
    hienchu
        23
    hienchu  
       2015-11-10 09:53:36 +08:00
    你是培训班出来的吗?:P
    skywatcher
        24
    skywatcher  
       2015-11-10 10:49:25 +08:00
    描述太捉急了,圆心、圆心角,半径、边长傻傻分不清楚,顺便楼上那句话!你是培训班出来的吗?
    icebreaker
        25
    icebreaker  
       2015-11-10 21:02:36 +08:00   ❤️ 1
    这样子不是很简单吗?
    var oX = 300, oY=300;
    var aX = 300, aY = 200;
    var origin = Math.atan((aY-oY)/(aX-oX));
    var oDegree = origin * 180/Math.PI;
    var r = 100, degree =90;
    var calcdegree = oDegree + degree;
    var Radian = calcdegree * Math.PI/180;
    var x = Math.cos(Radian)*r, y = Math.sin(Radian)*r;
    var bX = oX + x, bY = oY +y;
    console.log("bx:"+ bX + ", by:" +bY);
    lightening
        26
    lightening  
       2015-11-10 22:57:23 +08:00
    @just4test 他已知值是给坐标的,还是解析几何方便点。
    iguoji
        27
    iguoji  
    OP
       2015-11-12 19:43:53 +08:00
    @icebreaker 谢谢你。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3092 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 14:14 · PVG 22:14 · LAX 06:14 · JFK 09:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.