听起来很有趣!如果您的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. wxWidgets:打印框架概述
  2. Source Insight 4.0 最简单的破解安装
  3. 区块链基础语言(三)——Go语言开发工具
  4. 阿里最全Java面试100题汇总:涵盖天猫、蚂蚁金服等面试题!含答案~
  5. AjAx下拉列表框(SELECT)jquery插件
  6. 论文解读丨LayoutLM: 面向文档理解的文本与版面预训练
  7. 【Python3网络爬虫开发实战】1.4.2-MongoDB安装
  8. Web后端学习笔记 Flask(8) WTForms 表单验证,文件上传
  9. Ubuntu18.04 下搭建Hyperledger Fabric 1.0.0环境
  10. webpack之loader篇
  11. 幻昼计算机弹奏,freepiano曲谱_Freepiano简谱
  12. Win10易升是什么?如何彻底关闭Windows10易升?
  13. 使用DevIL来加载OpenGL纹理
  14. 裸 VSCode 必备插件
  15. 11.软件测试-----性能测试
  16. 平衡左右脑、加强记忆、提高情商……冥想的这些好处你知道吗?
  17. js 去掉字符串的空格回车换行
  18. FLUENT提供了9个湍流模型,教你如何选择
  19. 全球首个AI模型开发管理标准正式发布,九章云极DataCanvas公司助力AI工程化新发展
  20. 零濡鸦之巫女服装解锁mod

热门文章

  1. 1.9 实例:截取新闻标题
  2. python爬取快代理IP并测试IP的可用性
  3. MySQL中的组函数(聚合函数)
  4. 【Java】 5.6 类的继承
  5. Spring Boot 中如何实现 HTTP 认证?
  6. Java面试2018常考题目汇总
  7. Java之线程同步练习
  8. java类初始化顺序_「漫画」Java中的父子类的执行顺序到底是怎么一回事?
  9. LeetCode 08字符串转整数09回文数
  10. 使用VS2019开始第一个C语言程序,环境安装配置+代码实例