외부 타원의 다각형 그리기
"이렇게 열광적인 일을, 너는 무엇을 하고 싶니?"이런 소리를 들었지만 어떤 사건에서 실제로 필요했다.
고등학교 수학이 실제 업무에서 살아남는 장면이 있는데 이런 가벼운 느낌으로 읽어주셨으면 좋겠습니다.
전제 지식
외접 타원의 다각형을 쓰는 전제 지식으로 다음과 같은 두 가지가 필요하다.
전제지식1: 원외접 다각형의 좌표
원의 반지름
r
을 설정하고 원의 외접 다각형 교점의 각도θ
를 설정하면 진짜 원의 중심에서 진짜 원의 외접 다각형 교점까지의 거리r/cos(θ/2)
가 됩니다.따라서 외접 다각형의 좌표는
(x, y) = (r/cos(θ/2)*cos(α), r/cos(θ/2)*sin(α))
이다.α
는 외접 다각형의 각이다)전제지식2: 타원과 실원의 관계
중심을 원점으로 하는 반경 a의 진원과 반장직경 a, 반단직경 b의 타원을 고려한다.
이 두 도형은 다음과 같은 관계가 있다.
真円の座標(x, y)=楕円の座標(x, (b/a)y)
즉, 반경 a의 진원을 y방향으로 배가하면 반장직경 a, 반단직경 b의 타원을 형성할 수 있다.(결론) 그리기 방법
다음 절차에 따라 반장직경 a, 반단직경 b의 타원을 그릴 수 있다.
(b/a)
(전제지식2)Matplotlib 그리기
Matplotlib을 사용하여 실제로 그리는 경우는 다음과 같습니다.
비교하기 위해 타원 외접 다각형을 포함한 총 4개의 도형을 그렸다.
참고로 원본 코드는 이런 느낌입니다.
# numpyをインポート
import math
import matplotlib.pyplot as plt
import pylab
inRadius = 5.0
radius_a = 5.0
radius_b = 3.0
#
# 真円の描画
#
def draw_circle():
# 中心(0.2,0.2)で半径0.2の円を描画
list = plt.Circle((0.0, 0.0), inRadius, fc="#f0f0f0", label = "TrueCircle")
plt.gca().add_patch(list)
plt.axis('scaled')
#
# 真円外接多角形の描画
#
def draw_out_circle():
outSeg = 10
deg = math.radians(360 / outSeg)
angle = 0
x = []
y = []
outRadius = inRadius / math.cos(deg / 2)
for i in range(outSeg + 1):
angle += deg
x.append(outRadius*math.cos(angle))
y.append(outRadius*math.sin(angle))
plt.plot(x, y, label = "OutTrueCircle")
#
# 楕円の描画
#
def draw_ellipse():
outSeg = 360
deg = math.radians(360 / outSeg)
angle = 0
x = []
y = []
outRadius = radius_a / math.cos(deg / 2)
for i in range(outSeg + 1):
angle += deg
x.append(outRadius*math.cos(angle))
y.append(outRadius*math.sin(angle) * (radius_b / radius_a))
plt.plot(x, y, label = "Ellipse")
#
# 楕円外接多角形の描画
#
def draw_out_ellipse():
outSeg = 10
deg = math.radians(360 / outSeg)
angle = 0
x = []
y = []
outRadius = radius_a / math.cos(deg / 2)
for i in range(outSeg + 1):
angle += deg
x.append(outRadius*math.cos(angle))
y.append(outRadius*math.sin(angle) * (radius_b / radius_a))
plt.plot(x, y, label = "OutEllipse")
if __name__ == '__main__':
draw_circle()
draw_out_circle()
draw_ellipse()
draw_out_ellipse()
plt.legend() # 凡例を表示
pylab.legend(bbox_to_anchor=(1.05, 1), loc='upper left', borderaxespad=0)
pylab.subplots_adjust(right=0.7)
plt.title("Graph Title")
plt.xlabel("X-axis")
plt.ylabel("Y-axis")
plt.show()
이상.재미있다고 생각하는 사람이'괜찮다'는 것을 얻으면 즐겁다.
Reference
이 문제에 관하여(외부 타원의 다각형 그리기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/yagiyuki/articles/43f0b0e3d464ea9fbaee텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)