24. Wektory
Treści kształcenia: Podstawy geometrii analitycznej. Podstawy rachunku wektorów i ich zastosowania. Równania prostych i powierzchni. Równanie prostej - postać kierunkowa i ogólna, warunek równoległości i prostopadłości prostych, odległość dwóch punktów i punktu od prostej, równanie okręgu. Krzywe i powierzchnie zadane parametrycznie.
Efekty kształcenia: Potrafi wykorzystać rachunek wektorowy w odniesieniu do obiektów geometrycznych. Operuje równaniami w opisach geometrycznych.
Podstawy¶
Intuicyjnie mówiąc, wektory to wielkości, które mają pewien “kierunek”. Pojęcie to jest motywowane rozmaitymi problemami fizycznymi i geometrycznymi. Czasami mówimy o wektorach zaczepionych i niezaczepionych. Przyjmujemy, że wektory zaczepione są takie same, jeżeli mają ten sam koniec i początek. Wektory niezaczepione uznajemy natomiast za równe, jeżeli po przesunięciu jednego z nich, będą one miały te same punkty początkowe i końcowe. Przykładowo poniższe wektory są różne jako wektory zaczepione (bo mają inny początek), ale równe jako wektory niezaczepione.
#Rysunek dwóch równych wektorów niezaczepionych.
v = arrow((0, 0), (1, 2))
w = arrow((3, 0.5), (4, 2.5))
(v+w).show(axes = False)
W dalszym ciągu będziemy zawsze mówili o wektorach niezaczepionych, jako że są one o wiele ważniejsze w zastosowaniach. Wektory niezaczepione mają trzy podstawowe cechy:
długość,
kierunek,
zwrot (stronę, w którą skierowana jest strzałka).
Do wielkości wektorowych w fizyce należą między innymi: droga, prędkość, przyspieszenie, siła, pęd, ciężar. Wielkościami skalarnymi (tzn. liczbowymi) są natomiast masa, praca, energia, objętość, gęstość i wiele innych.
Współrzędne wektora¶
Niech będą punktami na płaszczyźnie. Wektor niezaczepiony o początku w punkcie i końcu w punkcie oznaczać będziemy przez . Przesuńmy nasz wektor tak, by jego początkiem był punkt . Wtedy jego koniec ma współrzędne . Parę tą nazywamy współrzędnymi wektora . Dwa wektory są równe wtedy i tylko wtedy, gdy równe są ich współrzędne. Twierdzenie Pitagorasa pozwala na stwierdzenie, że długość wektora o współrzędnych (oznaczana ) wynosi
Podobnie, jeżeli i są punktami w przestrzeni, to współrzędnymi wektora jest trójka . Z tego powodu wektory na płaszczyźnie są często utożsamiane ze zbiorem (parami liczb rzeczywistych), zaś wektory w przestrzeni są utożsamiane ze zbiorem (trójkami liczb rzeczywistych).
Przykład - współrzędne wektora¶
Jeżeli punkty mają współrzędne , , to wektor ma współrzędne .
W Sage’u możemy zdefiniować wektor, używając komendy vector oraz krotki zmiennych.
# Przykład określenia wektora w Sage'u
v = vector((1, 2, 3))Wektor przeciwny¶
Najprostszą operacją na wektorach jest branie wektora przeciwnego. Wektor przeciwny do ma tą samą długość i kierunek, ale przeciwny zwrot. Oznaczamy go jako . Jeżeli , to .
#Rysunek wektora przeciwnego.
v = vector((-2, 3))
w = - v
drawing = plot(v) + plot(w, color = 'red')
drawing += text(r"$\vec{v}$", (v[0], v[1] - 0.5), fontsize = 20)
drawing += text(r"$-\vec{v}$", (w[0], w[1] - 0.5), fontsize = 20, color = "red")
drawing.show()
# Przykład obliczania wektora przeciwnego w Sage'u
v = vector((1, 2, 3))
print(-v)(-1, -2, -3)
Dodawanie wektorów¶
W jaki sposób dodać do siebie wektory? Intuicyjnie, wyobraźmy sobie, że dwie osoby ciągną sanki za dwa sznurki. Każda z tych osób ciągnie w trochę innym kierunku. Jak poruszać się będą sanki? Ich droga wypadnie “gdzieś pomiędzy” wektorami wyznaczonymi przez dwa sznurki. Jeżeli narysujemy wektory w układzie współrzędnych i dopełnimy je do równoległoboku, ich suma będzie jedną z przekątnych (tzw. zasada równoległoboku).
# Ilustracja zasady równoległoboku.
v = vector((-2, 3))
w = vector((1, 2))
v_sum_w = v+w
drawing = plot(v) + plot(w) + plot(v_sum_w, color = 'red')
drawing += line([v, v_sum_w], linestyle = "dashed")
drawing += line([w, v_sum_w], linestyle = "dashed")
drawing += text(r"$\vec{v}$", (v[0], v[1] - 0.5), fontsize = 20)
drawing += text(r"$\vec{w}$", (w[0], w[1] - 0.5), fontsize = 20)
drawing += text(r"$\vec{v} + \vec{w}$", (v_sum_w[0]-0.3, v_sum_w[1]), fontsize = 20, color = "red")
drawing.show()
Jeżeli wektor ma współrzędne , zaś współrzędne , to . Analogiczny wzór zachodzi dla wektorów w przestrzeni.
Przykład - współrzędne sumy¶
Jeżeli , zaś , to .
#Przykład dodawania wektorów w Sage'u
v1 = vector((1, 2, 3))
v2 = vector((-2, 4, 7))
print(v1 + v2)(-1, 6, 10)
Przykład - suma kilku wektorów¶
Jeżeli , , są dowolnymi punktami, to . Przykładowo na poniższym rysunku, sumą wektorów , , , jest wektor .
# Ilustracja - suma kilku wektorów.
P = [(0, 0), (1, 1), (2, 1), (3, 2), (4, 1)]
opisy = ["A", "B", "C", "D", "E"]
draw = text("", (0, 0))
for i in range(len(P) - 1):
draw += text(opisy[i], P[i], fontsize = 15, color = 'black')
draw += arrow(P[i], P[i+1]).plot()
draw += arrow(P[0], P[-1], color = "red").plot()
draw.show(axes = False)
Zauważmy, że odejmowanie wektora to po prostu dodawanie wektora przeciwnego. Współrzędne różnicy są różnicami współrzędnych.
Przykład - odejmowanie wektorów¶
# Przykład odejmowania wektora w Sage'u
v1 = vector((1, 2, 3))
v2 = vector((2, -1, 4))
print(v1 - v2)(-1, 3, -1)
Mnożenie wektora przez skalar¶
Wynikiem mnożenia wektora przez skalar (liczbę) jest inny wektor. Wektor ten ma ten sam kierunek, ale jest “-krotnie dłuższy”, zaś jego zwrot zależy od znaku liczby . Jeżeli , to współrzędne wektora to .
# Ilustracja - mnożenie wektora przez skalar dodatni.
v = vector((1, 2))
v1 = 2*v
plot(v1, color = "red") + plot(v) + text(r"$\vec v$", tuple(v + vector((0.05, 0))), fontsize = 30) + text(r"$2 \cdot \vec v$", tuple(v1 + vector((0.2, 0))), fontsize = 30, color = "red")
# Ilustracja - mnożenie wektora przez skalar ujemny.
v = vector((1, 2))
v1 = -2*v
plot(v1, color = "red") + plot(v) + text(r"$\vec v$", tuple(v + vector((0.05, 0))), fontsize = 30) + text(r"$-2 \cdot \vec v$", tuple(v1 + vector((0.2, -0.1))), fontsize = 30, color = "red")
# Przykład mnożenia przez skalar w Sage'u
v = vector((1, 2, 3))
print(-2*v)(-2, -4, -6)
Przykład (wzór na siłę)¶
Wynikiem mnożenia wektora przyspieszenia przez masę (wartość skalarną) jest wektor siły :
Przykład - równoległobok¶
Niech , , .
(a) Znajdź punkt taki, by czworokąt ABCD był równoległobokiem.
(b) Wyznacz współrzędne punktu przecięcia przekątnych tego równoległoboku.
Rozwiązanie:
(a) Niech . Boki AB oraz DC są równoległe i mają tą samą długość, zatem . Dostajemy zatem , .
(b) Oznaczmy ten punkt przez . Punkt ten jest środkiem przekątnej BD, zatem . Niech . Zauważmy, że ma takie same współrzędne, co wektor , czyli:
# Narysujmy punkty A, B, C, D, S.
A = point((1, 3), size = 50)
B = point((2, 4), size = 50)
C = point((3, 2), size = 50)
D = point((2, 1), size = 50)
S = point((2, 5/2), size = 50, color = "red")
(A+B+C+D+S).plot()
Mnożenie skalarne wektorów¶
Wektory można również mnożyć przez siebie, ale wynikiem nie będzie inny wektor a liczba. Motywacja pochodzi z fizyki. Wyobraźmy sobie, że ciągniemy sanki za sznurek (patrz rysunek poniżej). Praca, jaką wykonujemy, jest równa iloczynowi przemieszczenia sanek przez siłę. We wzorze tym “liczy się” jednak jedynie siła , z jaką ciągnęliśmy sanki równolegle do podłoża. Iloczyn oraz przemieszczenia to iloczyn skalarny wektorów i .
# Ilustracja do motywacji fizycznej.
obrazek = polygon([(0, 0), (1, 0), (1, 0.5), (0, 0.5)], fill = False)
obrazek += arrow((1, 0.5), (2, 2), color = "red")
obrazek += text(r"$\vec F$", (1.6, 1.6), color = "red", fontsize = 20)
obrazek += arrow((1, 0.5), (2, 0.5), color = "red")
obrazek += text(r"$\vec F_x$", (1.6, 0.8), color = "red", fontsize = 20)
obrazek += arrow((1, 0.3), (1.5, 0.3))
obrazek += text(r"$\vec s$", (1.6, 0.2), fontsize = 20)
obrazek += text(r"$W = |\vec F_x| \cdot |\vec s| = \vec F \circ \vec s$", (6, 1), fontsize = 20)
obrazek.show(axes = False)
Iloczyn skalarny oraz oznaczamy przez . Iloczynem wektorów oraz jest liczba . Iloczyn skalarny można obliczyć również z następującego wzoru:
gdzie oznacza miarę kąta między wektorami oraz .
Spróbujmy zrozumieć, jak działa iloczyn skalarny, zakładając, że kąt między wektorami jest w przedziale .
#Kod apletu, pokazującego wartości iloczynu skalarnego dla zmieniającego się kąta.
def iloczyn_skalarny(alpha):
alpha *= (pi/180).n()
v = vector((1, 1))
R = matrix(2,2,[cos(alpha),-sin(alpha),sin(alpha),cos(alpha)])
w = R*vector((2, 2))
drawing = plot(v, color = 'red') + plot(w) + text(r"$\vec v \circ \vec w = $"+str((v*w).n(4)), (-3, 2.5), fontsize = 15) + text(r"$\alpha = $"+str(int(180/pi*alpha)) + r"${}^{\circ}$", (-3, 3), fontsize = 15)
drawing += text("(" + str(w[0].n(3)) + ", "+ str(w[1].n(3)) + ")", (w[0], w[1])) + text(str(v), (v[0], v[1]), color = 'red')
return drawing
@interact
def _(alpha = slider(0, 360)):
iloczyn_skalarny(alpha).show(xmin = -3, xmax = 3, ymin = -3, ymax = 3)
aplet = [iloczyn_skalarny(alpha) for alpha in [0, 45, 70, 80, 88, 90]]# Wersja statyczna powyższego apletu.
g1=graphics_array(aplet,ncols=3)
g1.show(figsize=[10,10], aspect_ratio = 1)
Widzimy, że iloczyn skalarny jest największy, gdy wektory mają ten sam kierunek (kąt = ) i zmniejsza się, gdy kąt zbliża się do . Jest to zgodne z interpretacją fizyczną podaną powyżej. W szczególności:
,
wektory i są do siebie prostopadłe wtedy i tylko wtedy, gdy .
# Przykład mnożenia skalarnego w Sage'u
v = vector((1, 2, 3))
w = vector((-1, 4, 0))
print(v*w)7
Przykład - normowanie wektora¶
Niech . Znajdź wektor o tym samym kierunku i zwrocie, co , ale o długości 1. (Mówimy, że normujemy wektor , zastępując go znalezionym w ten sposób wektorem)
Rozwiązanie: ponieważ wektor ten ma ten sam zwrot i kierunek, musi być on postaci dla pewnego , . Policzmy długość takiego wektora:
Stąd szukany wektor to .
# Przykład normowania wektorów w Sage'u.
v = vector((1, 2, 3))
print(v.normalized())
plot(v) + plot(v.normalized(), color = "red")(1/14*sqrt(14), 1/7*sqrt(14), 3/14*sqrt(14))
# Przykład normowania wektorów w Sage'u.
v = vector((1, 2, 3))
print(v.normalized())
graphics = plot(v) + plot(v.normalized(), color = "red")
graphics = graphics.rotate((0, 0, 1), pi/2)
graphics.show(viewer = 'tachyon')(1/14*sqrt(14), 1/7*sqrt(14), 3/14*sqrt(14))

Przykład -- czy dany czworokąt jest kwadratem?¶
Czy czworokąt o wierzchołkach , , i jest kwadratem?
Wskazówka: Punkty A, B, C, D możemy utożsamiać z wektorami , , , , gdzie O = (0, 0, 0).
# Rozwiązanie zadania za pomocą Sage'a - ręczne rozwiązanie wygląda tak samo.
# Punkty OA, OB, OC, OD możemy utożsamiać z wektorami A, B, C, D, gdzie O = (0, 0, 0).
A = (-3, 5, 6)
B = (1, -5, 7)
C = (8, -3, -1)
D = (4, 7, -2)
#Liczymy boki czworokąta (jako wektory).
AB = vector(B) - vector(A)
BC = vector(C) - vector(B)
CD = vector(D) - vector(C)
DA = vector(A) - vector(D)
#Sprawdzamy, czy są prostopadłe
print(AB*BC == 0)
print(BC*CD == 0)
print(CD*DA == 0)
print(DA*AB == 0)
#Sprawdzamy, czy AB i BC mają tą samą długość
print(AB * AB == BC * BC)True
True
True
True
True
# GRAFIKA 3D
# Narysujmy punkty w przestrzeni.
A = (-3, 5, 6)
B = (1, -5, 7)
C = (8, -3, -1)
D = (4, 7, -2)
A = point3d(A, size = 80)
B = point3d(B, size = 80)
C = point3d(C, size = 80)
D = point3d(D, size = 80)
draw = Graphics()
draw = A + B + C + D
draw.show(xmin = -10, xmax = 10, ymin = -10, ymax = 10, zmin = -10, zmax = 10)# GRAFIKA 3D - wersja statyczna
# Narysujmy punkty w przestrzeni.
A = (-3, 5, 6)
B = (1, -5, 7)
C = (8, -3, -1)
D = (4, 7, -2)
A = point3d(A, size = 20)
B = point3d(B, size = 20)
C = point3d(C, size = 20)
D = point3d(D, size = 20)
draw = Graphics()
draw = A + B + C + D
draw.show(xmin = -10, xmax = 10, ymin = -10, ymax = 10, zmin = -10, zmax = 10, viewer = 'tachyon')
Przykład - obrót punktu¶
O jaki kąt należy obrócić punkt wokół punktu , aby uzyskać punkt ?
Rozwiązanie:¶
Chcemy znaleźć kąt między wektorami oraz . Mamy:
Aby znaleźć kąt, mając podany cosinus, korzystamy z funkcji arccos.
# Obliczenie kątów o zadanym cosinusie.
alpha = acos(4/5)
alpha = acos(4/5) * 180/pi
print(alpha.n())
print(360 - alpha.n())36.8698976458440
323.130102354156
#aplet sprawdzający poprawność naszego rozumowania
def obrot_punktu(alpha):
alpha *= (pi/180).n()
v = arrow((1, 2), (6, 7), color = "red")
R = matrix(2,2,[cos(alpha),-sin(alpha),sin(alpha),cos(alpha)])
w = R*vector((1, 7))
w = w + vector((1, 2))
w = arrow((1, 2), (w[0], w[1]))
drawing = plot(v) + plot(w)
return drawing
@interact
def _(alpha = slider(0, 360)):
obrot_punktu(alpha).show(xmin = -10, xmax = 10, ymin = -10, ymax = 10)
aplet = [obrot_punktu(alpha) + text(str(alpha)+r"$^{\circ}$", (2, 5)) for alpha in [0, 36, 323]]# Wersja statyczna powyższego apletu.
g1=graphics_array(aplet,ncols=3)
g1.show(figsize=[10,10], aspect_ratio = 1)
Przykład¶
Dwa sześciany mają wspólną jedną ze ścian. Wykaż, że przekątna główna jednego z tych sześcianów jest prostopadła do przekątnej ściany bocznej drugiego sześcianu (patrz grafika poniżej).
# GRAFIKA 3D
# Ilustracja do zadania.
from sage.plot.plot3d.shapes import ColorCube
c = ColorCube([0.5,0.5,0.5], ['red', 'blue', 'green', 'black', 'white', 'orange'], opacity=0.5)
c1 = ColorCube([0.5,0.5,0.5], ['red', 'blue', 'green', 'black', 'white', 'orange'], opacity=0.5)
c = c.translate([0.5, 0.5, 0.5])
c1 = c1.translate([-.5, 0.5, 0.5])
c += arrow3d((0,0,0), (-1,0,1), color="yellow")
c += arrow3d((0,0,0), (1,1,1), color="red")
c += c1
c.show()
#Wersja statyczna
c.show(viewer='tachyon', aspect_ratio = 1)
Umieśćmy sześciany w układzie współrzędnych tak, by jeden z nich miał wierzchołki A, B, C, D, E, F, G, H, zaś drugi - E, F, G, H, I, J, K, L, gdzie:
Wtedy przekątna główna pierwszego z nich to , zaś przekątna ściany drugiego to , zatem:
Z własności iloczynu skalarnego wynika, że są one do siebie prostopadłe.
Iloczyn wektorowy¶
Na sam koniec omówimy iloczyn wektorowy. Wynikiem mnożenia wektorowego dwóch wektorów oraz jest wektor prostopadły do nich obu o długości:
Jego współrzędne dane są wzorami:
Wzór ten można zapamiętać jako “wyznacznik”:
gdzie , , .
Uwaga: iloczyn wektorowy jest antyprzemienny, tzn. .
Przykład - wektor prostopadły do dwóch zadanych¶
Znajdź wektor długości 1 prostopadły do wektorów oraz .
# Rozwiązanie zadania w Sage'u
v1 = vector((1, 2, -3))
v2 = vector((2, 0, 1))
w = v1.cross_product(v2)
w1 = 1/(w.norm())*w
print(w1)(2/69*sqrt(69), -7/69*sqrt(69), -4/69*sqrt(69))
Zadania dodatkowe¶
Zadanie nr 1¶
Niech , , .
(a) Znajdź punkt taki, by czworokąt ABCD był równoległobokiem.
(b) Wyznacz współrzędne punktu , który leży na przekątnej i spełnia: .
Zadanie nr 2¶
Wyznacz kąt między przekątnymi sześcianu.
Zadanie nr 3¶
Punkty , oraz są wierzchołkami trójkąta ABC. Obliczyć pole tego trójkąta.
Wskazówka: skorzystaj ze wzoru oraz z iloczynu wektorowego.