python画正方形内切圆_python画出三角形外接圆和内切圆的方法

刚看了《最强大脑》中英对决,其中难度最大的项目需要选手先脑补泰森多边形,再找出完全相同的两个泰森多边形。在惊呆且感叹自身头脑愚笨的同时,不免手痒想要借助电脑弄个图出来看看,闲来无事吹吹牛也是极好的。

今天先来画画外接圆和内切圆,留个大坑后面来填。

外接圆圆心:三角形垂直平分线的交点。

内切圆圆心:三角形角平分线的交点。

有了思路,就可以用万能的python来计算了

import matplotlib.pyplot as plt

from scipy.linalg import solve

import numpy as np

from matplotlib.patches import Circle

'''

求三角形外接圆和内切圆

'''

# 画个三角形

def plot_triangle(A,B,C):

x = [A[0],B[0],C[0],A[0]]

y = [A[1],B[1],C[1],A[1]]

ax = plt.gca()

ax.plot(x,y,linewidth=2)

# 画个圆

def draw_circle(x,r):

ax = plt.gca()

cir = Circle(xy=(x,y),radius=r,alpha=0.5)

ax.add_patch(cir)

ax.plot()

# 外接圆

def get_outer_circle(A,C):

xa,ya = A[0],A[1]

xb,yb = B[0],B[1]

xc,yc = C[0],C[1]

# 两条边的中点

x1,y1 = (xa + xb) / 2.0,(ya + yb) / 2.0

x2,y2 = (xb + xc) / 2.0,(yb + yc) / 2.0

# 两条线的斜率

ka = (yb - ya) / (xb - xa) if xb != xa else None

kb = (yc - yb) / (xc - xb) if xc != xb else None

alpha = np.arctan(ka) if ka != None else np.pi / 2

beta = np.arctan(kb) if kb != None else np.pi / 2

# 两条垂直平分线的斜率

k1 = np.tan(alpha + np.pi / 2)

k2 = np.tan(beta + np.pi / 2)

# 圆心

y,x = solve([[1.0,-k1],[1.0,-k2]],[y1 - k1 * x1,y2 - k2 * x2])

# 半径

r1 = np.sqrt((x - xa)**2 + (y - ya)**2)

return(x,r1)

# 内切圆

def get_inner_circle(A,C[1]

ka = (yb - ya) / (xb - xa) if xb != xa else None

kb = (yc - yb) / (xc - xb) if xc != xb else None

alpha = np.arctan(ka) if ka != None else np.pi / 2

beta = np.arctan(kb) if kb != None else np.pi / 2

a = np.sqrt((xb - xc)**2 + (yb - yc)**2)

b = np.sqrt((xa - xc)**2 + (ya - yc)**2)

c = np.sqrt((xa - xb)**2 + (ya - yb)**2)

ang_a = np.arccos((b**2 + c**2 - a**2) / (2 * b * c))

ang_b = np.arccos((a**2 + c**2 - b**2) / (2 * a * c))

# 两条角平分线的斜率

k1 = np.tan(alpha + ang_a / 2)

k2 = np.tan(beta + ang_b / 2)

kv = np.tan(alpha + np.pi / 2)

# 求圆心

y,[ya - k1 * xa,yb - k2 * xb])

ym,xm = solve([[1.0,-ka],-kv]],[ya - ka * xa,y - kv * x])

r1 = np.sqrt((x - xm)**2 + (y - ym)**2)

return(x,r1)

if __name__ == '__main__':

A = (1.,1.)

B = (5.,2.)

C = (5.,5.)

plt.axis('equal')

plt.axis('off')

plot_triangle(A,C)

x,r1 = get_outer_circle(A,C)

plt.plot(x,'ro')

draw_circle(x,r1)

x_inner,y_inner,r_inner = get_inner_circle(A,C)

plt.plot(x_inner,'ro')

draw_circle(x_inner,r_inner)

plt.show()

下面看看两个三角形的结果:

15173933431.jpg?2018025143427

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/502046.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ar面部识别_Blippar公司加入实时面部识别技术 扫脸就能解锁个人AR简介

VR之家消息:近日,AR初创公司Blippar在其应用中加入了实时面部识别技术。据悉,利用这项新技术,用户通过智能手机摄像头扫脸,只要被扫对象已经存在AR简介,就能解锁这个人的个人资料。Blippar公司加入实时面部…

查看地区的ip段_「教程」CloudFlare 自选 IP优化网站速度

前言CloudFlare 官网虽然不提供 CNAME / AAAA / A 记录接入 CloudFlare 的 CDN ,但是我们可以通过 CloudFlare Partner 免费使用 CNAME / A 记录接入 CloudFlare 。而我们正好利用 CloudFlare 使用 A 记录接入 CDN 的方式,自定义节点 IP ,例如…

android手机可以设置屏幕锁定,安卓手机屏幕锁设置方法(九个点图案)

这里以三星S5368手机屏幕锁为例随着三星S5368手机系统功能愈来愈完善,性能愈来愈强劲,越来越多的三星S5368用户们都喜欢把一些重要的信息甚至隐私放在三星S5368手机里面,但是这就有可能会让别人看到,这样一来你的三星S5368里面的信…

python win10 连接hive_使用win10+python3.5+impyla 连接大数据平台hive表的步骤与问题解决...

环境硬件配置及Hadoop,Hive版本一、安装步骤pip install pure-saslDownloading https://pypi.tuna.tsinghua.edu.cn/packages/16/83/30eaf3765de898083 75a8358f9c15d45a3dd44ed26be991471abc0b4480b/pure_sasl-0.5.1-py2.py3-none-any.whlpip install thrift_sasl0…

python将excel表按地方拆分_Python将一个Excel拆分为多个Excel

本文实例为大家分享了Python将一个Excel拆分为多个Excel的具体代码,供大家参考,具体内容如下 原始文档如下图所示将销售部门一、二、三科分别存为三个Excel 代码如下 # -*- coding: utf-8 -*- """ Created on Mon Jul 9 20:25:31 2018 au…

arduino麦轮转弯程序_麦克纳姆轮智能小车接线方案

折腾了好几天,实在搞不定了,决定上来社区求助。现在的硬件情况是这样的:- HM-GM37-3429霍尔传感器大载重电机,每个电机六条线,其中电机输入两个,霍尔编码器电源两个,编码器AB相两个- 四个电机&a…

python中range 函数_pythonrange,range函数的用法

当range()函数内填入第三个参数时,第三个参数表示百步长。函数语法:range(start,stop[,step])参数说明:start:计数从度start开始。默认是从0开始。例知如道range(5)回等价于range(0,5&#xff0…

xss植入_网站xss漏洞的利用过程

XSS跨站脚本,是一种Web安全漏洞,有趣是是他并不像SQL注入等攻击手段攻击服务端,本身对Web服务器没有危害,攻击的对象是客户端,使用浏览器访问这些恶意地址的网民。这里就跟大家稍微讲解一下网站xss漏洞的利用过程。网站…

html制作状态栏数字时钟,html5 canvas制作15种数字时钟样式代码

特效描述:html5 canvas制作 数字时钟样式。html5 canvas数字时钟代码代码结构1. 引入CSS2. 引入JS3. HTML代码clockd1_{"indicate": true,"indicate_color": "#222","dial1_color": "#666600","dial2_color…

python出现的次数最多的元素_【Python 秘籍】序列中出现次数最多的元素

问题 怎样找出一个序列中出现次数最多的元素呢? 解决方案 collections.Counter 类就是专门为这类问题而设计的, 它甚至有一个有用的 most_common() 方法直接给了你答案。 为了演示,先假设你有一个单词列表并且想找出哪个单词出现频率最高。你…

华为申请注册鸿蒙商标,华为申请“鸿蒙商标”,企业注册商标有什么价值?

原标题:华为申请“鸿蒙商标”,企业注册商标有什么价值?国家知识产权局商标局网站显示,华为已申请“华为鸿蒙”商标。申请日期为2018年8月24日,注册公告日期为2019年5月14日,专用权限期是从2019年5月14日到2…

dabs是什么意思_cpdd是什么意思(网络语cpdd是什么梗啥意思)

随着网络的快速发展,抖音和微博这样的软件也是越来越火,因此很多流行语就随之诞生,特别是在抖音里,经常看到游戏相关的用语,比如桃酥和阿姨打LOL时候,就出现了很多高校的流行语,其中“cpdd”这个…

python coding utf-8_【转】怎么在Python里使用UTF-8编码

基本概念 在Python里有两种类型的字符串类型:字节字符串和Unicode的字符串,一个字节字符串就是一个包含字节列表。 当需要的时候,Python根据电脑默认的locale设置将字节转化成字符。 在Mac OX上默认的编码是UTF-8,但是在别的系统上&#xff0…

lisp6 暖通cad_(完整版)暖通CAD设计技巧1

暖通CAD设计技巧1.执行编辑命令,提示选择目标时,用矩形框方式选择,从左向右拖动光标,为"窗口Windows"方式,如果从右向左拖动光标,则为"交*Cross"方式。2.相对坐标输入点时,…

html5音乐播放器设计论文,基于微信小程序的音乐播放器设计和毕业论文

摘 要随着通信技术的发展和智能设备的普及,移动互联网在近两年发展迅猛,新兴的移动社交软件“微信”逐渐走进了手机用户的生活,深受全国数亿用户的欢迎。随着微信版本的不断更新,微信也从单纯的聊天应用逐变成媒体信息、游戏娱乐…

python递归_python3之递归

1、递归的特点 递归算法是一种直接或间接调用自身算法的过程,在计算机编程中,递归算法对解决一大类问题是十分,它往往使算法的描述简洁而且易于理解。 递归算法解决问题的特点: (1)递归就是在过程或函数里调…

什么原因导致芯片短路_PCB电路板短路的原因及解决方法-EDA/PCB-与非网

【导读】焊接短路(如:连锡)、PCB 短路(如:残铜、孔偏等)、器件短路、组装短路、ESD/EOS 击穿、电路板内层微短路、电化学短路(如:化学残留、电迁移)、其他原因造成的短路。首先,了解一下常见的电路板短路的种类:短路按…

html表格按钮相对位置不变,表格中如何使td或div相对定位在某一行上面

有个需求,就是点击表格某一行,上面要居中显示一组菜单。而列表需要有1列或多列不固定宽度,有的是百分比宽度,有的是固定宽度(就是传统的table用法,或者CSS3的Flex Box)小伙伴的实现是用table,js算出距表头的…

python远程监控jvm_python和jstat命令采集jvm数据导入zabbix监控-阿里云开发者社区

利用python和jstat命令采集jvm数据注:用法运行python jvcheck.py 变量如EC或E等#codingutf-8#authoryangzai# 用jstat检查jvm信息然后用zabbix监控import commandsimport sysjvmvarssys.argv[1](status, PID) commands.getstatusoutput("sudo -u tomcat jps|g…

pythonstdin_如何写入Python子进程'stdin?

下面是它的样子对NUKE 11.3v4的商业版本Windows 10:import subprocess# Run NUKEs script in Terminal mode on Windows machine...subprocess.Popen([C:/Program Files/Nuke11.3v4/Nuke11.3.exe, -t, E:/NukeTest/test.nk], stdinPIPE, stdoutPIPE) 以下是NUKE 11.…