1. 程式人生 > >用python畫三角形外接圓和內切圓

用python畫三角形外接圓和內切圓

剛看了《最強大腦》中英對決,其中難度最大的專案需要選手先腦補泰森多邊形,再找出完全相同的兩個泰森多邊形。在驚呆且感嘆自身頭腦愚笨的同時,不免手癢想要藉助電腦弄個圖出來看看,閒來無事吹吹NB也是極好的。

今天先來畫畫外接圓和內切圓,留個大坑後面來填 :-]。

外接圓圓心:三角形垂直平分線的交點。
內切圓圓心:三角形角平分線的交點。

有了思路,就可以用萬能的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, y, 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, B, 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, y, r1) # 內切圓 def get_inner_circle(A, B, C): xa, ya = A[0], A[1] xb, yb = B[0], B[1] xc, yc = C[0], 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, x = solve([[1.0, -k1], [1.0, -k2]], [ya - k1 * xa, yb - k2 * xb]) ym, xm = solve([[1.0, -ka], [1.0, -kv]], [ya - ka * xa, y - kv * x]) r1 = np.sqrt((x - xm)**2 + (y - ym)**2) return(x, y, r1) if __name__ == '__main__': A = (1., 1.) B = (5., 2.) C = (5., 5.) plt.axis('equal') plt.axis('off') plot_triangle(A, B, C) x, y, r1 = get_outer_circle(A, B, C) plt.plot(x, y, 'ro') draw_circle(x, y, r1) x_inner, y_inner, r_inner = get_inner_circle(A, B, C) plt.plot(x_inner, y_inner, 'ro') draw_circle(x_inner, y_inner, r_inner) plt.show()

下面看看兩個三角形的結果

相關推薦

python三角形外接圓內切圓

剛看了《最強大腦》中英對決,其中難度最大的專案需要選手先腦補泰森多邊形,再找出完全相同的兩個泰森多邊形。在驚呆且感嘆自身頭腦愚笨的同時,不免手癢想要藉助電腦弄個圖出來看看,閒來無事吹吹NB也是極好的。 今天先來畫畫外接圓和內切圓,留個大坑後面來填 :-]。

【112】python散點圖直線圖的小例子

最近自學python,寫了個畫散點圖和直線圖的小例子。把這個例子放到部落格裡做個備份。 import numpy as np import matplotlib.pyplot as plt imp

python個五星紅旗

eth for forward margin mar turtle got idt 根據 根據下圖發現,主星和2、3副星從右畫就好,而1、4副星從左開始畫會比較好找坐標。 import turtle turtle.bgcolor("red") turtle.fil

python一朵玫瑰花

jpg port es2017 time logs 代碼 from mage light 廢話不多說,直接上代碼 from turtle import * import time setup(600,800,0,0) speed(0) penup() seth(90)

就算會python顆心,可你依然還是只單身狗

SQ per 答案 bin ive matplot 題意 就是 size :) 標題是開玩笑的,千萬別認真。 隨著AI的飛速發展,有誌於此行的碼農也是急劇的增加,帶來的就是大家對算法、數學的興趣也格外升高。 本文的來歷是這樣,今天某老同事在朋友圈發了一張屏拍,求公式。

python小豬佩奇(非原創)

import CI Go col 轉換 fill begin 範圍 nco 略作改動: # coding:utf-8 import turtle as t t.screensize(400, 300, "blue") t.pensize(4) # 設置畫筆的大小 t.c

Python篇:pythonxy散點圖

python畫xy散點圖測試筆記 import matplotlib.pyplot as plt plt.title("I'm a scatter diagram.") plt.xlim(xmax=7,xmin=0) plt.ylim(ymax=7,ymin=0) plt.anno

沉澱再出發:python各種圖表

畫座標系沉澱再出發:用python畫各種圖表 一、前言     最近需要用python來做一些統計和畫圖,因此做一些筆記。 二、python畫各種圖表  2.1、使用turtle來畫圖 1 import turtle as t #turtle庫是pyt

## Python出等高線,並且設定xy軸刻度標籤

import matplotlib.pyplot as plt import numpy as np fig = plt.figure(figsize=(9, 6)) # 定義等高線高度函式 def f(x, y): return (pow(x,3)+pow(y,3)-15*x-20*

PythonROC曲線 matplotlib 顏色、標記、線條引數控制

在分類模型中,ROC曲線和AUC值經常作為衡量一個模型擬合程度的指標。最近在建模過程中需要作出模型的ROC曲線,參考了sklearn官網的教程和部落格。現在將自己的學習過程總結如下,希望對初次接觸的同學有所幫助。PS:網上的例子實在是晦澀難懂,在折騰了一下午之後

python爬蟲爬取登陸github

一 利用API簡單爬取 利用GitHub提供的API爬取前十個star數量最多的Python庫 GitHub提供了很多專門為爬蟲準備的API介面,通過介面可以爬取到便捷,易處理的資訊。(這是GitHub官網的各種api介紹)     使用到的庫 import re

python解決 圖論 多項式的矩陣、特徵值、特徵多項式的相互轉化

馬上就要畢業了,不少的同學都在緊鑼密鼓的寫論文,對於一些數學系或者理科生來說,經常會遇到一些圖論問題,根據圖形來求出這個圖的矩陣、圖的度……那麼我們知道很多的圖形都能轉化成特徵多項式,那麼今天我們就來寫一個程式,使其通過圖形的矩陣來求多項式。 開始 其實大部分數學工具(Matlab)都能

聖誕節!教你 Python 棵聖誕樹

作者 | 糖甜甜甜 責編 | 胡巍巍 如何用Python畫一個聖誕樹呢? 最簡單: 1height = 5 2 3stars = 1 4for i in range(height): 5 print((' ' * (height - i)) + ('*' * s

Python 快速實現 HTTP FTP 伺服器

用 Python 快速實現 HTTP 伺服器 有時你需臨時搭建一個簡單的 Web Server,但你又不想去安裝 Apache、Nginx 等這類功能較複雜的 HTTP 服務程式時。這時可以使用 Python 內建的 SimpleHTTPServer 模組快速搭建一個簡單的 HTTP 伺服器。 Si

python進行圖片處理特徵提取

原文來自:http://www.analyticsvidhya.com/blog/2015/01/basics-image-processing-feature-extraction-python/ 毫無疑問,上面的那副圖畫看起來像一幅電腦背景圖片。這些都歸功於我的

沒有基礎小編帶你,python機器貓(有程式碼)

小編帶你玩python 沒有基礎小編帶你,用python畫機器貓。只需要python3和小編的程式碼即可。python3小編送,程式碼文章有,現在就差個你了。 執行不了的找小編,小編包教會你。 重要的事情說三遍: python3小編送,程式碼文章有。 python3小編送,程式碼文章有。 python

實戰 | 教你Python各種版本的聖誕樹

專案介紹 大家好呀,這是一份遲到的聖誕節Python專輯專案。 我們一起看看如何用Python做出超級炫酷的聖誕樹吧~ 1.入門版本 height = 5 stars = 1 for i in range(height): print((' ' * (height - i

python小豬票佩琪

最近社會豬真是火得不得了,看到知乎上有人問:你寫過或者看過哪些有意思的程式碼,高贊答主用turtle畫了一隻佩琪。於是馬上跟風畫了一隻玩玩。turtle是python中繪製圖形的庫,還是挺方便的,需要的是耐心。附上程式碼,網上也有很多。#使用turtle畫小豬佩琪 impo

Python 小豬佩奇

觀察這個影象可以發現,小豬佩奇在構圖基本是各種曲線,類拋物線、類圓、類橢圓、類二次貝塞爾曲線。這裡說的都是“類”,這也正是小豬佩奇的構圖精髓,一種手繪風格,而不是標準刻板的線條。在前端技術選型上,畫圖首先想到的是 SVG、Canvas,但它們本身就擅長畫圖,而且網上都有線上編

python一朵玫瑰給你

聽說 python 還能畫畫?是的,今天親手畫一朵玫瑰給你。   turtle 是 python 中一個強大的繪製圖像的庫,可以用來繪製各種影象,使用起來很方便。   但是需要計算各種角度、距離等,所以要想完成一幅複雜的影象還是有一定的難度的。 &n