椭圆弧按长度等分求圆周上点的坐标

zwphot 2019-05-09 02:34:30
已知:
以逆时针为准,起点坐标(x1,y1), 终点坐标(x2,y2), 圆心坐标(x0,y0)
长轴半径a, 短轴半径b
要求:
按每段长度s,等分椭圆弧,求椭圆弧上的所有等分点的坐标
求算法
...全文
1084 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
it_gz_xi 2019-05-10
  • 打赏
  • 举报
回复
学习一下,说不定哪天能用上
wanghui0380 2019-05-09
  • 打赏
  • 举报
回复
先定积分采样出总长,然后再分次采样出总长/10(代码是10等分)
wanghui0380 2019-05-09
  • 打赏
  • 举报
回复
引用 8 楼 bloodish 的回复:

def distance(x1,y1,x2,y2):
    return sqrt((x2-x1)**2 + (y2-y1)**2)

a = 5
b = 3
x0 = a
y0 = 0
angle = 0
d = 0
while(angle<=360):
    x = a * cos(radians(angle))
    y = b * sin(radians(angle))
    d += distance(x0,y0,x,y)
    x0 = x
    y0 = y
    angle += 0.25
print("Circumference of ellipse = {:f}".format(d))
onetenth = d/10
angle = 0
x0 = a
y0 = 0
angle0 = 0
for i in range(10):
    dist = 0
    while(dist<onetenth):
        angle += 0.025
        x = a * cos(radians(angle))
        y = b * sin(radians(angle))
        dist += distance(x0,y0,x,y)
        x0 = x
        y0 = y

    print(
        "{} : angle = {:.2f}\tdifference = {:.2f}\tDistance {:.2f}"
        .format(i+1,angle, angle-angle0,dist))
    angle0 = angle
这个是定积分采样,每次采样0.025增量角度积分计算长度
bloodish 2019-05-09
  • 打赏
  • 举报
回复
bloodish 2019-05-09
  • 打赏
  • 举报
回复

def distance(x1,y1,x2,y2):
    return sqrt((x2-x1)**2 + (y2-y1)**2)

a = 5
b = 3
x0 = a
y0 = 0
angle = 0
d = 0
while(angle<=360):
    x = a * cos(radians(angle))
    y = b * sin(radians(angle))
    d += distance(x0,y0,x,y)
    x0 = x
    y0 = y
    angle += 0.25
print("Circumference of ellipse = {:f}".format(d))
onetenth = d/10
angle = 0
x0 = a
y0 = 0
angle0 = 0
for i in range(10):
    dist = 0
    while(dist<onetenth):
        angle += 0.025
        x = a * cos(radians(angle))
        y = b * sin(radians(angle))
        dist += distance(x0,y0,x,y)
        x0 = x
        y0 = y

    print(
        "{} : angle = {:.2f}\tdifference = {:.2f}\tDistance {:.2f}"
        .format(i+1,angle, angle-angle0,dist))
    angle0 = angle
zwphot 2019-05-09
  • 打赏
  • 举报
回复
how-to-divide-circumference-of-an-ellipse-equally 这个链接我这里打不开,可以直接贴内容出来吗
bloodish 2019-05-09
  • 打赏
  • 举报
回复
此处有正解,python to C#应该很简单 how-to-divide-circumference-of-an-ellipse-equally
wanghui0380 2019-05-09
  • 打赏
  • 举报
回复
或许有另外的办法,可以先FFT变成频谱,然后再频谱周期上想想办法
wanghui0380 2019-05-09
  • 打赏
  • 举报
回复
查了一下,如果是等长分割没有算法,只能采用经验法近似解 https://blog.csdn.net/baidu_38621657/article/details/87907829
stherix 2019-05-09
  • 打赏
  • 举报
回复
初想挺简单,后来发现椭圆弧长很难计算,看别人的算法吧 https://blog.csdn.net/baidu_38621657/article/details/87907829
wanghui0380 2019-05-09
  • 打赏
  • 举报
回复
哦,错了,原来不是等分角度,是等分长度哦。这个估计得先展开,然后求点,在重新映射回来
wanghui0380 2019-05-09
  • 打赏
  • 举报
回复
额,要啥算法,直接百度“椭圆极坐标方程”
本文假设数码相机成像原理为小孔成像,在此基础上,通过两种合理的模型 对数码相机定位问题进行了较深入的研究。 针对问题一和二,我们建立了两种不同模型——变换矩阵模型和公切线模 型。在变换矩阵模型中,建立了物、像、相机三个坐标系,分别称为世界坐标系, 像坐标系和光心坐标系。研究世界坐标系向像坐标系的变换矩阵3 4 ( ) ij M a ´ = ,推 导出圆在像坐标系中的像为椭圆。利用灰度检测可以得到像中各椭圆圆周上各点 的坐标,通过多元线性回归拟合出各椭圆方程;对单独一个圆进行研究时,在合 理的近似前提下,以圆心为世界坐标系的原点,可求出该圆心所成像在像坐标系 中的坐标u = a14 , v = a24。最后我们求得5个圆心所成像在光心坐标系中的坐标分 别为(单位:mm):(-50.00,51.32,-417.20)、(-23.54,49.47,-417.20)、(33.86, 45.24,-417.20)、(-60.05,-31.22,-417.20)、(18.52,-31.48,-417.20)。在公 切线模型中,通过简单几何证明,得出在小孔成像时,公切线交点的像就是公切 线像的交点,联系题目中所给标靶的特殊性(所有圆全等),得出像平面中公切 线交点连线的交点就是标靶中对应圆心的像,并设计了一种算法得到5个圆心所 成像在光心坐标系中的坐标分别为(单位:mm):(-49.92,51.36,-417.20)、 (-23.47,49.34,-417.20)、(33.88,45.05,-417.20)、(-60.04,-31.29,-417.20)、 (18.58,-31.56,-417.20)。 在问题三中,我们用计算机模拟的方法,统计和分析了我们模型的在不同的 情况下所得到的结果与理论值之间的误差,并着重研究了相机与标靶的距离和像 平面与圆平面之间的偏角对结果的影响。结果表明在一定的前提下,当相机与标 靶的距离大于200 毫米,-0.5 £a £ 0.5以及-1£ b £ 0.5(单位为度)时,我们 的结果与理论值相差不到一个像素,有着较好的稳定性和精度。 问题四中,通过每个相机旋转变换矩阵R和平移向量T,可以得到两相机的 变换关系: 1 1 1 2 1 2 2 1 R = R R -、T = R R - T +T ,即相对位置关系,并理论推导了从两相 机中像在光心坐标系中的参数得到物在世界坐标中的参数,实现双目定位。另外 在相机的光心和像屏中心的连线垂直于象平面基础上,我们还给出另外一种合理 模型,通过矢量的方法求出物相对于光心坐标系的精确位置,从而可以得到两相 机的相对位置。

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧