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

2015-11-09 17:57:37 +08:00
 iguoji

o
o
o
ooooooooo

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

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

角度为 90 度,边长是 100

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

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

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

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

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

求 JS 的公式代码。

5284 次点击
所在节点    程序员
27 条回复
b821025551b
2015-11-09 18:04:40 +08:00
原谅我“圆心角”、“圆心”傻傻分不清楚
xjx0524
2015-11-09 18:08:50 +08:00
那叫半径。。。
kokdemo
2015-11-09 18:08:54 +08:00
需要区分一下角度,这里以锐角为例

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


花了个图示意下……代码绝对不给……
iguoji
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
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
2015-11-10 09:37:54 +08:00
@iguoji 你只看最后用蓝框标出来的那两个,就是坐标

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

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

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

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

js 里面^不是平方,是异或啊………

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/234849

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX