听起来很有趣!如果您的3个点击点位于同一象限中,则由这些点定义的三角形的一个角度必须是钝角。调用B和其他两个顶点A和C. x-y定向椭圆的一般方程中有4个参数。将A,B和C的x和y坐标代入椭圆方程将给出三个方程。你需要拿出第4个。您可以自由选择在游戏环境中有意义的第四点。这是一个SymPy代码片段,它根据A,B和C以及参数“f”将x值分配给椭圆的中心。

def e3(p1, p2, p3, f):

t = Triangle(p1, p2, p3)

a = t.angles

for p in a:

if a[p] > pi/2:

break

else:

return

while p != p2:

p1, p2, p3 = p2, p3, p1

pts = A, B, C = p1, p2, p3

# perpendicular line to AB passing through A

perp = Segment(A, B).perpendicular_line(A)

# intersection between that and the perpendicular to that

# which passes through C

m = perp.perpendicular_line(C).intersection(perp)[0]

delta = m - A

c = A + delta*f

x, y, h, r, y0 = symbols('x y h r y0', cls=Dummy)

eq = Ellipse((c.x, y0), h, r).equation(x, y)

s = solve([

eq.xreplace(dict(zip((x, y), p))) for p in pts], dict=True)[0]

return eq.subs(s) # for desmos graphing: str(eq.subs(s)).replace('**','^').replace('_','')+'=0'

f = .125,.25,.5,1,2的一些结果显示在desmos。

您可以看到他们都通过您提供的要点作为示例。红色圆圈提供了一个有趣的参考点。您可能想要选择一个f,因此椭圆的最终宽度是圆的直径的一小部分,它将通过这些点。

然而,椭圆经过的点不在每个椭圆的相同象限中。要满足该标准,您必须考虑“离轴”椭圆。使用here发布的任意椭圆方程可能也会有所帮助,以指导您在定义椭圆时选择要控制的变量。

为了使方程尽可能简单地求解和确定,如果该角度产生锐角,则可以使轴穿过第二个点击点,否则通过第1和第3点。这是代码证明:

def e3(A, B, C, n=7):

'''Return centered at the midpoint of A and C with the axis going through B if the angle at B is acute, else going through A and C.

'''

from sympy import Line

xc, yc = ctr = (A + C)/2

AC = A.distance(C)

smalls = True

if AC >= B.distance(A) and AC >= B.distance(C):

s = Line(A, C).slope

M2 = ctr.distance(A)**2

b = B

if abs(s) <= 1:

m2 = -M2*(s*(b.x - xc) - b.y + yc)**2/(

-M2*(s**2 + 1) + (s*(b.y - yc) + b.x - xc)**2)

else:

s = 1/s

m2 = M2*(s*(b.y - yc) - b.x + xc)**2/(

M2*(s**2 + 1) - (s*(b.x - xc) + b.y - yc)**2)

smalls = False

else:

s = Line(B, ctr).slope

M2 = ctr.distance(B)**2

p = A # or C

if abs(s) <= 1:

m2 = -M2*(s*(p.x - xc) - p.y + yc)**2/(

-M2*(s**2 + 1) + (s*(p.y - yc) + p.x - xc)**2)

else:

s = 1/s

m2 = M2*(s*(p.y - yc) - p.x + xc)**2/(

M2*(s**2 + 1) - (s*(p.x - xc) + p.y - yc)**2)

smalls = False

if smalls:

el = -1 + (-s*(x - xc) + y - yc)**2/(m2*(s**2 + 1)) + (

s*(y - yc) + x - xc)**2/(M2*(s**2 + 1))

else:

el = (M2*(s**2 + 1)*(-m2*(s**2 + 1) + (s*(y - yc) - x + xc)**2

) + m2*(s**2 + 1)*(s*(x - xc) + y - yc)**2)/(

M2*m2*(s**2 + 1)**2)

return el.expand().n(n=n)

from sympy import Point

a,b,c = Point(7/5, 12/5), Point(3/2, 5/2), Point(19/10, 3/2)

e3(a,b,c)

e3(b,c,a)

e3(c,a,b)

根据第二个单击点,您将获得1或3个省略号:

python用函数绘制椭圆_python - 如何使用python从3个点找到椭圆的方程 - SO中文参考 - www.soinside.com...相关推荐

  1. python中函数的参数_Python小知识-Python中的函数参数(基础篇)

    0 总述 这个题目分为2篇,第一篇基本上是概念以及实例,有个相对系统的认识,第二篇想写的深入一些,不同参数类型的区别以及和c/c++的函数参数对比下异同-下面开始是第一篇的内容啦- Python中的函 ...

  2. python对象不可订阅_python - TypeError:'int'对象不可订阅 - 尝试创建csv文件时 - SO中文参考 - www.soinside.com...

    我的字典auto_anno看起来像这样: defaultdict(, {'Beda': {'Fuery': {'anger': 2, 'anticipation': 1, 'disgust': 2, ...

  3. python log函数怎么打_Python的log日志功能及设置方法

    python log函数怎么打_Python的log日志功能及设置方法_Elaine要当律师的博客-CSDN博客

  4. python中函数和方法的区别?Python编程判断当前获取的对象是函数还是方法

    python中函数和方法的区别?Python编程判断当前获取的对象是函数还是方法 目录

  5. python用函数绘制椭圆_Python 如何绘制椭圆?

    在画图作业中遇到这个问题,总结一下: 通常怎么在python中画图? 数据的处理.分析和可视化已经成为 Python 近年来最重要的应用之一.Python 在数据可视化方面拥有很多功能强大的工具,Ma ...

  6. python 二元函数绘制_Python绘制二元函数曲面

    微实践:绘制二元函数曲面 我们将演示如何借助于ufunc的广播运算计算下述二元函数的在一个xy平面上的值并将其绘制成3D曲面.其中,x和y的取值范围均为[-2,+2]. 为了达到目的,我们需要一个二维 ...

  7. python根据列表绘制柱状图_python把一个列表画柱状图

    原博文 2018-10-18 14:28 − https://blog.csdn.net/w113691/article/details/80385534... 相关推荐 2019-12-07 19: ...

  8. python分段函数编写程序_python分段函数如何编写?

    python分段函数如何编写? python编写分段函数的方法: 1.绘制分段函数:y=4sin(4πt)-sgn(t-0.3)-sgn(0.72-t) 代码: #!/usr/bin/python# ...

  9. python彩色蟒蛇绘制方向_python绘制蟒蛇,绘制五彩蟒蛇

    原博文 2019-05-06 23:26 − python绘制蟒蛇,绘制五彩蟒蛇 1.用Python绘制蟒蛇 from turtle import * setup(650,350,200,200) p ...

最新文章

  1. hibernate -- 分页模糊查询中setParameter 和setParameterList
  2. 简约之美Jodd-http--深入源码理解http协议
  3. gin context和官方context_Gin框架系列01:极速上手
  4. 信息学奥赛一本通 1022:整型与布尔型的转换 | OpenJudge NOI 1.2 09
  5. SDOI2016R2(怎么可能是解题报告)
  6. android 百度室内地图开发,androidsdk | 百度地图API SDK
  7. java程序员年龄大了怎么办,互联网行业“中年”危机
  8. 【剑指offer】(七)—— 用两个栈实现队列
  9. element-ui 引用阿里云矢量图不显示图标,显示的为小方框
  10. IDC发布中国AI云服务市场报告 百度智能云排名第一
  11. Javaweb 新浪云平台部署
  12. system的用法,多样用法、有趣的system、关机自制
  13. 大家应该如何选择短线交易?
  14. 代码 todo 忘记_永远不要忘记您的仓库项目经理tickgit的TODO评论
  15. 相亲遇到喜欢的IT男有感
  16. error: Failed dependencies: mariadb-libs is obsoleted by MySQL-shared-compat-5.6.46-1.el7.x86_64
  17. VSCode调试C/C++项目
  18. C语言函数: 字符串函数及模拟实现strtok()、strstr()、strerror()
  19. 中国版LinkedIn到底长什么样
  20. super-----this

热门文章

  1. ACM入门之【前缀和】
  2. 2.3.1 进程同步 进程互斥
  3. css京东购物车静态页面实现
  4. Dubbo生产者消费者配置
  5. Zookeeper的命令
  6. jQuery的延迟对象
  7. mybatis 传入id_想深入理解MyBatis架构及原理实例分析 把握这些就够了
  8. sketch软件_Sketch软件怎么用?怎么提升Sketch软件技巧?
  9. python浮点数占多少字节_Python的浮点数损失精度问题
  10. go linux环境搭建,Linux 下 Go 环境搭建以及 Gin 安装