Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лаб. 4 КП АлГем

.docx
Скачиваний:
17
Добавлен:
30.08.2024
Размер:
136.18 Кб
Скачать

ЛР4

import numpy as np import matplotlib.pyplot as plt from sympy import *

Line((1,4),(5,3))

p1,p2=Point(1,4),Point(5,3)

Пример 1

p1,p2=Point(1,0),Point(5,3) L=Line(p1,p2) L.equation()

-3*x + 4*y + 3

Упражнение 4.1

p1,p2=Point(1,0),Point(5,3) L=Line(p1,p2) L.arbitrary_point()

Point2D(4*t + 1, 3*t)

Пример 2

a=Point(-2,3) k=2 l=Line(a,slope=k) print(l.equation())

-2*x + y - 7

Пример 3

x=np.linspace(-5,5,100) n=[5,-4] ortN=n/np.linalg.norm(n) plt.subplot() plt.arrow(0,-2,n[0],n[1],width=0.05,color='Red') plt.arrow(0,0,ortN[0],ortN[1],width=0.05,color='Green') plt.title('Уравнение прямой 5x-4y-8=0') plt.xlabel('x') plt.ylabel('y') plt.grid() plt.axis('equal') plt.show()

Упражнение 4.2

p1,p2,p3=Point(1,4),Point(5,3),Point(-1,1) l=Line(p1,p2) l.equation() l.distance(p3)

14*sqrt(17)/17

Пример 4

e=Line((0,0),(1,0)) w=Line((1,1),(0,0)) s1=w.angle_between(e) s2=w.smallest_angle_between(e) [s1,s2]

[3*pi/4, pi/4]

Упражнение 4.3

p1=Point(0,0) p2=Point(2,3) p3=Point(-2,2) l1=Line(p1,p2) print("Уравнение прямой l1:",l1.equation()) l2=l1.parallel_line(p3) print("Уравнение прямой l2:",l2.equation()) l3=l1.perpendicular_line(p3) print("Уравнение прямой l3:",l3.equation()) plt.xlim(-20,20) plt.ylim(-20,20) h1,=plt.plot(x,(3*x)/2,label='$l1: -3x+2y$') h2,=plt.plot(x,(3*x+10)/2,label='$l2: -3x+2y-10$') h3,=plt.plot(x,(-2*x+2)/3,label='$l3: -2x-3y+2$') plt.legend(handles=[h1,h2,h3]) plt.axis('equal') plt.grid() plt.show()

Уравнение прямой l1: -3*x + 2*y Уравнение прямой l2: -3*x + 2*y - 10 Уравнение прямой l3: -2*x - 3*y + 2

Упражнение 4.4

p=Point(0.5,0) L=Line((0,0),(1,1)) print(L.projection(p))

Point2D(1/4, 1/4)

Пример 5

t1, t2, t3 = Point(0.6, -0.4), Point(0, 0), Point(-2, 2) H1 = Line(t2, t3) H2=H1.parallel_line(t1) H2=H2.equation() print(H2) x = np.arange(-5, 5, 0.1) n = [-3, 3] M0 = [0.6, -0.4] y = x-1 plt.plot(M0[0], M0[1],'or') plt.arrow(M0[0], M0[1], n[0], n[1], width=0.08, color='Red') plt.plot(x, y) plt.text(M0[0] + 0.5, M0[1] - 0.5,'$M_0(x_0,y_0)$') plt.title('Уравнение прямой y=x-1') plt.xlabel('x') plt.ylabel('y') plt.axis('equal') plt.grid() plt.show()

-2*x - 2*y + 2/5

Упражнение 4.5

t1, t2, t3 = Point(0.6, -0.4), Point(0, -2), Point(-3, 1) H1 = Line(t2, t3) H2=H1.parallel_line(t1) H2=H2.equation() print(H2) x = np.arange(-5, 5, 0.1) q = [-3, 3] M0 = [0.6, -0.4] y = x-1 plt.plot(M0[0], M0[1],'or') plt.arrow(0, -2, q[0], q[1], width=0.08, color='Red') plt.plot(x, (-2*x+0.4)/2) plt.text(M0[0] + 0.5, M0[1] - 0.5,'$M_0(x_0,y_0)$') plt.title('Уравнение прямой -3x-3y+0,6=0') plt.xlabel('x') plt.ylabel('y') plt.axvline(x=0,color='k') plt.axhline(y=0,color='k') plt.axis('equal') plt.grid() plt.show()

-3*x - 3*y + 3/5

Пример 6

t = np.arange(-3, 3, 0.1) M0 = [-1, 3] N = [-4, -1] q = [4, -3] n = [3, 4] sp = np.dot(n, q) print('Скалярное произведение векторов (n,q) =', sp) x = M0[0] + q[0] * t y = M0[1] + q[1] * t M1 = Point(3, 0) s = Line(M1, M0) D=s.distance(N) print('Расстояние от точки N до прямой =',D) plt.plot(x, y) plt.plot(M0[0], M0[1],'or',N[0], N[1],'oy',M1[0], M1[1],'ok') plt.text(M0[0] + 0.8, M0[1] - 0.5,'$M_0(-1,3)$') plt.text(M1[0] + 0.8, M1[1] - 0.5,'$M_1(3,0)$') plt.text(N[0] + 0.8, N[1] - 0.5,'$N(-4,-1)$') plt.arrow(N[0], N[1], n[0], n[1], width=0.08,color='g') plt.arrow(N[0], N[1], q[0], q[1], width=0.08, color='g') plt.title(f'Уравнение прямой x={M0[0]}+{q[0]}t, y={M0[1]}-{-q[1]}t') plt.xlabel('x') plt.ylabel('y') plt.grid() plt.axis('square') plt.show()

Скалярное произведение векторов (n,q) = 0 Расстояние от точки N до прямой = 5

Дополнительное задание

import math a,b,c=Point(2,-2),Point(3,5),Point(6,1) l1=Line(a,b) l2=Line(b,c) l3=Line(c,a) print("Уравнение прямой l1:",l1.equation()) print("Уравнение прямой l2:",l2.equation()) print("Уравнение прямой l3:",l3.equation()) a1=np.array(a) b1=np.array(b) c1=np.array(c) dab=math.sqrt((b1[0]-a1[0])**2+(b1[1]-a1[1])**2) print("AB: ",dab) dbc=math.sqrt((c1[0]-b1[0])**2+(c1[1]-b1[1])**2) print("BC: ",dbc) dac=math.sqrt((a1[0]-c1[0])**2+(a1[1]-c1[1])**2) print("AC: ",dac) ACB=math.degrees(np.arccos((dbc**2+dac**2-dab**2)/(2*dac*dbc))) print("C: ",ACB) BC=Line(b,c) print("Уравнение прямой, на которой лежит высота, проведёенная из точки B: ",BC.equation()) plt.plot([a1[0],b1[0]],[a1[1],b1[1]],'-b') h1,=plt.plot([b1[0],c1[0]],[b1[1],c1[1]],'-r',label="Высота BC") plt.plot([c1[0],a1[0]],[c1[1],a1[1]],'-b') plt.text(a1[0]-0.2, a1[1]-0.4,'A',fontsize=12) plt.text(b1[0]-0.1, b1[1]+0.2,'B',fontsize=12) plt.text(c1[0]+0.1, c1[1]-0.4,'C',fontsize=12) m=Point((b1[0]+c1[0])/2, (b1[1]+c1[1])/2) m1=np.array(m) h2,=plt.plot([a1[0],m1[0]],[a1[1],m1[1]],'--m',label="Медиана AM") AM=Line(a,m) print("Уравнение прямой, на которой лежит медиана, проведенная из точки А: ",AM.equation()) dam=math.sqrt((m1[0]-a1[0])**2+(m1[1]-a1[1])**2) print("AM: ",dam) plt.text(m1[0]+0.1, m1[1],'M',fontsize=12) n=Point((a1[0]+b1[0])/2, (a1[1]+b1[1])/2) n1=np.array(n) h3,=plt.plot([c1[0],n1[0]],[c1[1],n1[1]],'--g',label="Биссектриса CN") AN=Line(a,n) print("Уравнение прямой, на которой лежит биссектриса угла С ",AN.equation()) plt.text(n1[0]-0.3, n1[1],'N',fontsize=12) plt.legend(handles=[h1,h2,h3]) plt.xlim(-1,9) plt.ylim(-2.5,5.5) plt.grid() plt.show()

Уравнение прямой l1: -7*x + y + 16 Уравнение прямой l2: 4*x + 3*y - 27 Уравнение прямой l3: 3*x - 4*y - 14 AB: 7.0710678118654755 BC: 5.0 AC: 5.0 C: 90.00000000000001 Уравнение прямой, на которой лежит высота, проведёенная из точки B: 4*x + 3*y - 27 Уравнение прямой, на которой лежит медиана, проведенная из точки А: -5*x + 5*y/2 + 15 AM: 5.5901699437494745 Уравнение прямой, на которой лежит биссектриса угла С -7*x/2 + y/2 + 8