Matematyka I FizykaProgramownie A.I. Gier

Elementarz matematyki i fizyki

Nie można się przed tym ukryć - jeśli chcesz nauczyć się sztucznej inteligencji, musisz poznać matematykę i fizykę. Jasne, możesz używać wielu technik sztucznej inteligencji w sposób "wytnijj i wklej", ale nie robisz sobie żadnych przysług; w momencie, gdy musisz rozwiązać problem nieco inny niż ten, do którego pożyczyłeś kod, będziesz miał trudności. Jeśli jednak zrozumiesz teorię tych technik, będziesz mieć znacznie większą szansę na znalezienie alternatywnego rozwiązania. Poza tym dobrze jest zrozumieć narzędzia, z którymi pracujesz. Jaki jest lepszy powód, aby nauczyć się tego, niż to? Przejrzyj tekst, aż dojdziesz do czegoś, czego nie znasz lub nie znajdziesz tematu, który Twoim zdaniem wymaga odświeżenia. W tym momencie zacznij czytać. Jeśli już znasz się na matematyce wektorowej i fizyce ruchu, proponuję całkowicie pominąć tą część i wrócić później, jeśli znajdziesz coś, czego nie rozumiesz.

Matematyka

Zaczniemy od matematyki, ponieważ nauka fizyki bez matematyki przypomina latanie bez skrzydeł.

Współrzędne kartezjańskie

Prawdopodobnie znasz już kartezjański układ współrzędnych. Jeśli kiedykolwiek napisałeś program, który rysuje obrazy na ekranie, prawie na pewno użyjesz kartezjańskiego układu współrzędnych do opisania pozycji punktów, linii i bitmap tworzących obraz. W dwóch wymiarach układ współrzędnych jest zdefiniowany przez dwie osie ustawione względem siebie pod kątem prostym i oznaczone w jednostkach długości. Oś pozioma nazywa się osią x, a oś pionowa - osią y. Punkt przecięcia osi nazywany jest punktem początkowym



Groty strzałek na każdym końcu osi na powyższym rysunku wskazują, że rozciągają się one w każdym kierunku w nieskończoność. Jeśli wyobrażasz sobie, że trzymasz nieskończenie duży arkusz papieru z narysowanymi na nim osiami x i y, papier reprezentuje płaszczyznę xy - płaszczyznę, na której można narysować wszystkie punkty w dwuwymiarowym kartezjańskim układzie współrzędnych. Punkt w przestrzeni 2D jest reprezentowany przez parę współrzędnych (x, y). Wartości x i y reprezentują odległości wzdłuż każdej z odpowiednich osi. Obecnie seria punktów lub linii wykreślonych w kartezjańskim układzie współrzędnych jest zwykle określana jako wykres, co na pewno oszczędza dużo pisania.
Aby przedstawić trójwymiarową przestrzeń, potrzebna jest inna oś - oś Z Oś Z rozciąga się od tyłu ekranu do tyłu za głową, przechodząc przez punkt początkowy na trasie.



Funkcje i równania

Pojęcie funkcji ma fundamentalne znaczenie dla matematyki. Funkcja wyraża związek między dwoma (lub więcej) terminami zwanymi zmiennymi i jest zwykle zapisywany w postaci równania (zestaw wyrażeń algebraicznych równy innym wyrażeniom algebraicznym). Zmienne są nazywane jako takie, ponieważ, jak sama nazwa wskazuje, ich wartości mogą się różnić. Zmienne są zwykle wyrażane literami alfabetu. Dwie najczęściej używane zmienne, które zobaczysz w równaniach matematycznych, to xiy (chociaż dowolna litera lub symbol jest równie poprawna). Jeśli każda wartość x może być powiązana z jedną wartością y, to y jest funkcją x. y jest zmienną zależną, ponieważ jej wartość zależy od wartości x. Oto kilka przykładów:
y = 2x (1,1)
y = mx + c (1,2)

W drugim przykładzie m i c reprezentują stałe (czasem nazywane współczynnikami) - wartości, które nigdy się nie zmieniają bez względu na wartość x. Są skutecznie podobne do równania 2 w równaniu (1.1). Dlatego jeśli a = 2, równanie (1.1) można zapisać w następujący sposób:
y = ax (1.3)
Biorąc pod uwagę dowolną wartość x, odpowiednią wartość y można obliczyć, wprowadzając wartość x do funkcji. Biorąc pod uwagę x = 5 i x = 7 oraz funkcję y = 2x, wartości y są następujące:
y = 2 (5) = 10
y = 2 (7) = 14 (1,4)

Ten typ funkcji, gdzie y zależy tylko od jednej innej zmiennej, nazywa się funkcją jednej zmiennej. Funkcje jednej zmiennej można wizualizować, wykreślając je na płaszczyźnie kartezjańskiej xy. Aby wykreślić funkcję, wystarczy przesuwać się wzdłuż osi x i dla każdej wartości x użyj funkcji do obliczenia wartości y. Oczywiście nie można wykreślić wykresu dla każdej wartości x - co zajęłoby wieczność (dosłownie) - więc musisz wybrać zakres wartości. Lewa strona poniższego rysunku pokazuje, jak wygląda funkcja y = 2x po wykreśleniu na płaszczyźnie xy, przy użyciu zakresu wartości x od -5,0 do 5,0.



Aby narysować funkcję y = mx + c na wykresie, musisz najpierw mieć pewne wartości dla stałych m i c. Powiedzmy, że m = 2 i c = 3, co daje funkcję y = 2x + 3. Prawa strona rysunku powyżej pokazuje wynikowy wykres. Wykresy wyglądają bardzo podobnie, prawda? Jest tak, ponieważ y = mx + c jest funkcją, która definiuje wszystkie linie proste w przestrzeni 2D. Stała m określa gradient linii lub to, jak strome jest nachylenie linii, a stała c określa, gdzie linia przecina oś y. Funkcja y = 2x, pokazana po lewej stronie na rysunku, jest równoważna funkcji y = mx + c, gdy m = 2 i c = 0. Wykres po prawej jest prawie identyczny, ale ponieważ jego wartość c wynosi 3, punkt przecięcia osi y jest przesunięty w górę o trzy jednostki. Czasami zobaczysz funkcję taką jak y = mx + c zapisaną w następujący sposób:


f(x) = mx + c (1,5)

Notacja f (x) oznacza, że zmienna zależna - w tym przykładzie y - zależy od zmiennej x w wyrażeniu podanym po prawej stronie, mx + c. Często zobaczysz symbole inne niż f, które reprezentują funkcję, więc nie myl się, jeśli natrafisz na coś takiego.

g(x) = x2 + bx (1.6)

g(x) reprezentuje dokładnie to samo, jakby równanie zostało zapisane jako:

f(x) = x2 + bx (1.7)

Funkcje mogą zależeć od więcej niż jednej zmiennej. Weźmy na przykład obliczenia dla pola prostokąta. Jeśli jego długość jest oznaczona literą l, a szerokość przez w, to pole A jest podane równaniem:

A = lw (1.8)

Aby wykreślić na wykresie funkcję dwóch zmiennych, taką jak (1.8), należy dodać trzeci wymiar, z, poniżej



Objętość kostki zależy od funkcji trzech zmiennych:

V = lwh (1.9)

gdzie h oznacza wysokość sześcianu. Aby narysować to na wykresie, musisz dodać czwartą oś. Niestety, chyba że pod wpływem związków psychotropowych ludzie nie widzą w więcej niż trzech wymiarach. Mamy jednak możliwość ich wyobrażenia, więc to właśnie musisz zrobić, jeśli chcesz wykreślić funkcje z więcej niż trzema zmiennymi na wykresie. Matematykom wydaje się to łatwe, ale wielu programistów, w tym ja, nie! Przestrzeń, którą zajmuje funkcja n-wymiarowa, gdzie n jest większa niż 3, jest często określana przez matematyków jako hiperprzestrzeń

Wykładniki i potęgi

Funkcja wykładnicza jest zdefiniowana w następujący sposób:

f (x) = ax (1.10)

a jest znane jako podstawa, a x jako potęga c. Jeśli równanie zostanie wypowiedziane, powiesz, że f (x) jest równe a do potęgi x. Oznacza to, że a jest mnożone przez siebie x razy. Więc 72 to to samo co pisanie 7x7, a 34 to to samo co pisanie 3x3x3x3. Liczba potęgi 2 jest znana jako kwadrat tej liczby, a liczba potęgi 3 jest znana jako sześcian. Dlatego sześcian 5 to:

53 = 5 x 5 x 5 = 125 (1,11)

Rysunek poniżej pokazuje równanie (1.10) wykreślone na wykresie dla a = 2. Krzywa wyraźnie pokazuje, jak gwałtownie rośnie wartość y przy x. Ten rodzaj krzywej jest często określany jako wzrost wykładniczy.



NOTA HISTORYCZNA : Z przyczyn straconych przez czas matematycy zdecydowali, że użyją drugiej części alfabetu do przedstawienia zmiennych, a resztę alfabetu do stałych. Dlatego osie w kartezjańskim układzie współrzędnych są oznaczone x, y i z.

Pierwiastki z liczb (pierwiastki)

Pierwiastek kwadratowy z liczby jest wartością, która po pomnożeniu przez siebie powoduje powstanie oryginalnej liczby. Pierwiastki kwadratowe są zapisywane przy użyciu symbolu pierwiastka √. Dlatego pierwiastek kwadratowy z 4 jest zapisany jako:

√4 = 2(1.12)

Możemy obliczyć obie strony tego równania, aby pokazać związek między mocą a pierwiastkiem:

4 =22 (1.13)

Pierwiastek kwadratowy z liczby jest także znany jako pierwiastek drugiego stopnia z tej liczby. Możemy również obliczyć pierwiastek trzeciego, czwartego, piątego lub dowolnego rozmiaru. Trzeci pierwiastek liczby jest znany jako pierwiastek sześcienny i jest zapisany w następujący sposób:∛. Zauważ, że potrzebujemy tam 3, aby powiedzieć nam, że pierwiastek ma być trzeci. Pierwiastek sześcienny liczby daje liczbę, która pomnożona przez potęgę trzech daje liczbę pierwotną. Na przykład:
∛27 = 3 (1.14)

Po raz kolejny możemy obliczyć obie strony równania, aby pokazać związek między potęgą a pierwiastkiem:
27 = 33 (1.15)

Można również zapisać pierwiastek z liczby jako wykładnik ułamkowy. Na przykład pierwiastek kwadratowy z liczby można zapisać jako x1/2, pierwiastek trzeciego stopnia jako x1/3i tak dalej.

Przykład 1

Rozważ następujące równanie:
3x + 7 = 22 - 2x (1.16)
To równanie można uprościć, odejmując 7 z obu stron.
3x + 7 - 7 = 22 - 2x - 7
3x = 15 - 2x (1.17)
Można to dodatkowo uprościć, dodając 2x po obu stronach:
3x + 2x = 15 - 2x + 2x
5x = 15 (1.18)
Możemy również podzielić obie strony przez 5, dając nam odpowiedź na x:
5x/5 = 15/5
x = 3 (1.19)
Rzućmy okiem na nieco bardziej złożony przykład.

Przykład 2

Powiedzmy, że chcemy rozwiązać następujące kwestie dla y:
y = 2(3x-5y) + x/3 (1.20)
Przede wszystkim możemy usunąć nawiasy, mnożąc termin w nawiasach (3x - 5y), przez wyraz na zewnątrz (2), dając:
y = 6x - 10y + x/3 (1.21)
Następnie dobrze jest usunąć wszystkie wyrażenia ułamkowe, mnożąc wszystkie wyrażenia po obu stronach przez mianowniki ułamków (mianownikami są wartości poniżej linii). W tym przykładzie pomnożenie wszystkich terminów po obu stronach równania (1.21) przez 3 daje:
3y = 18x - 30y + x (1.22)
W tym momencie mamy wyraz y po lewej i x i y po prawej. Musimy transponować podobne wyrazy, aby miały tę samą stronę równania. W tym przykładzie możemy to zrobić, dodając 30y po obu stronach.
3y + 30y = 18x - 30y + x + 30y
3y + 30y = 18x + x (1.23)
Teraz, gdy podobne terminy są zgrupowane razem, możemy je łączyć. To daje:
33y = 19x (1.24)
Na koniec powinniśmy podzielić obie strony przez współczynnik przed nieznaną zmienną. W tym przykładzie rozwiązujemy dla y, więc musimy podzielić obie strony przez 33, dając:
y = 19x/33 (1,25)

Przykład 3

Oto kilka innych zasad, które przydają się podczas uproszczenia równań:
x/y = 1/y · (x) (1,26)
a/x + b/y = ay+bx/ xy (1.27) (x+y)2 = x22 (x/y) 222 √/x/y = √ x/√y (1.30)
Rzućmy okiem na niektóre nowe zasady w akcji. Tym razem równanie do uproszczenia to:
5x - 2y = (y-x/√x)2 (1.31)
Zastosowanie reguły (1.29) daje:
5x - 2y = (y-x)2 / (√x)2
5x-2y = (y -x)2 / x (1.32)
Pomnożenie obu stron przez x w celu usunięcia części ułamkowej daje:
x(5x-2y) = (y-x)2 (1.33)
Teraz, aby pozbyć się nawiasów po lewej:
5x2 - 2xy = (y-x)2(1.34)
Aby usunąć nawiasy po prawej stronie, używamy reguły z (1.28):
5x2 - 2xy = x2 + y2 - 2xy (1.35)
Dodanie 2xy do obu stron daje:
5 x2 = x2 + y 2 (1.36)
Odejmując x2 z obu stron i przestawiając, uzyskujemy uproszczenie:
y2 = 4 x2 (1,37)
Ostatnim krokiem jest obliczenie pierwiastka kwadratowego z obu stron:
y = 2x (1.38)
Oczywiście uproszczenie równań może być znacznie trudniejsze, ale tych kilka reguły są wystarczające, aby zrozumieć dowolne z przedstawionych uproszczeń.

Trygonometria

Trygonometria oparta jest na badaniu trójkątów. Słowo pochodzi od greckiego słowa trigon, dla trójkąta i metry, dla miary. Jest to niezwykle przydatna dziedzina matematyki i ma wiele praktycznych zastosowań w informatyce. W polu sztucznej inteligencji w grze znajdziesz ją do obliczeń liniowych (LOS), wykrywania kolizji, niektórych aspektów znajdowania ścieżek itp. Wiele sztucznej inteligencji jest naprawdę zależnych od matematyki, gdy ją zagotujesz; mądrze będzie dobrze się tego nauczyć.

Promienie i odcinki

Promień to linia z jednym punktem końcowym. Ma nieskończoną długość i jest zdefiniowany przez kierunek (zwykle wyrażony jako znormalizowany wektor; patrz rozdział o wektorach w dalszej części tego rozdziału) i pochodzenie. Rycina 1.6 pokazuje promień umieszczony u źródła. Segment linii jest fragmentem linii i jest zdefiniowany przez dwa punkty końcowe. Rysunek pokazuje również odcinek linii zdefiniowany przez dwa punkty końcowe p1 i p2.



Kąty

Kąt jest zdefiniowany jako miara rozbieżności dwóch promieni o tym samym pozątku.



Możesz być przyzwyczajony do myślenia o kątach w stopniach. Ściany w większości domów mają zazwyczaj na przykład kąty 90 stopni, a koła mają 360 stopni. Matematycy wolą mierzyć wielkość kąta za pomocą radianów. Radiany są jednostką miary opartą na okręgu o promieniu jednostkowym - promieniu 1-wyśrodkowanym na początku. Promień koła to odległość od środka koła do jego obwodu. Rysując dwa promienie z rysunku powyżej na tym samym schemacie co koło jednostkowe, otrzymujemy rysunek poniżej. Długość odcinka zakrzywionej linii między dwoma promieniami - pokazana na schemacie jako linia przerywana - to kąt zmierzony w radianach między nimi



Teraz, gdy wiesz, co to jest radian, obliczmy, ile radianów jest w okręgu. Możesz pamiętać grecki symbol (pi) z czasów szkolnych. Jest to dobrze znana i często stosowana stała matematyczna o wartości 3,14159 (do pięciu miejsc po przecinku). Za pomocą pi można obliczyć obwód koła - odległość na całym obwodzie - za pomocą równania:
obwód = 2πr (1,39)
Wykorzystanie tego równania do określenia obwodu koła jednostkowego daje liczbę radianów w okręgu. Wynika to z faktu, że liczba radianów w okręgu jest długością obwodu koła o promieniu 1. Więc zastępujemy 1 równaniem r w równaniu (1.39), aby otrzymać:
obwód = 2πr = 2π(1) = 2π = num radianów (1.40)
Dlatego w każdym kręgu są 2π radiany
Teraz, gdy wiesz, ile radianów tworzy okrąg, możesz w razie potrzeby przeliczać między radianami i stopniami. Koło ma 360 stopni, co oznacza:
360o = 2π radianów
Dzieląc obie strony przez 360 otrzymujemy:
1o = 2π/360 radianów
Kąty są zwykle oznaczone grecką literą theta, która wygląda następująco: θ

Trójkąty

Trójkąt składa się z trzech odcinków linii połączonych na ich końcach. Wewnętrzne kąty trójkąta zawsze sumują się do radianów (180 stopni). Poniższej mamy opis różnych typówy trójkątów, które można napotkać:

* Trójkąt równoboczny ma boki o równej długości. Trójkąty z tą właściwością mają również kąty o równej wielkości.
* Trójkąt równoramienny ma dwa boki i dwa równe kąty.
* Trójkąt prostokątny ma jeden kąt, który wynosi π/ 2 radianów (90 stopni) - kąt prosty. Kąt prosty jest zawsze reprezentowany przez ramkę.
* Wszystkie kąty wewnętrzne trójkąta ostrego są ostre (mniej niż π/2 radianów).
* Trójkąt rozwarty ma jeden kąt rozwarty (większy niż π/2 radianów)

Twierdzenie Pitagorasa

Trójkąty, z których będziesz najczęściej korzystać, są odmiany o kształcie prostopadłym. Mają wiele interesujących właściwości, które można dobrze wykorzystać. Być może najsłynniejszą właściwość trójkątów prostokątnych odkrył grecki matematyk Pitagoras, który żył od 569 do 475 p.n.e. Był naprawdę bardzo sprytnym facetem i najbardziej znany jest z tego, że stwierdził:
Kwadrat przeciwprostokątnej trójkąta prostokątnego jest równy sumie kwadratów pozostałych dwóch boków.
Przeciwprostokątna trójkąta jest jego najdłuższym bokiem, jak pokazano na rysunku poniżej.



Jeśli przeciwprostokątna jest oznaczona jako h, twierdzenie Pitagorasa można zapisać jako:
h2 = a2 + b2 (1.41)
Wykorzystanie pierwiastka kwadratowego z obu stron daje:
h = √ a2 + b 2 (1.42)
Oznacza to, że jeśli znamy długość dowolnych dwóch boków trójkąta prostokątnego, możemy łatwo znaleźć trzeci.
Podczas pracy nad sztuczną inteligencją dla gier często używasz twierdzenia Pitagorasa, aby obliczyć, czy Agent A jest bliżej obiektu niż Agent B. Zwykle wymagałoby to dwóch wywołań funkcji pierwiastka kwadratowego, która, jak wszyscy wiemy, jest powolne i należy tego unikać, gdy tylko jest to możliwe. Na szczęście, porównując długości boków dwóch trójkątów, jeśli strona A jest większa niż strona B, to zawsze będzie większa, niezależnie od tego, czy długości są kwadratowe, czy nie. Oznacza to, że możemy uniknąć pierwiastka kwadratowego i po prostu porównać wartości kwadratowe. Jest to znane jako praca w przestrzeni kwadratu i jest to coś, co często zobaczysz w kodzie pokazanym u nas

Praktyczny przykład twierdzenia Pitagorasa

Załóżmy, że masz łucznika na pozycji A(8,4) i jego cel na pozycji T(2,1). Łucznik może wystrzelić strzałę maksymalnie na odległość 10 jednostek. W związku z tym, aby ustalić, czy uda mu się trafić w cel, należy obliczyć odległość między nimi. Łatwo to ustalić za pomocą twierdzenia Pitagorasa. Najpierw obliczane są długości boków TP i AP pokazane na rysunku

Aby znaleźć odległość AP, składnik y pozycji łucznika odejmuje się od składnika y pozycji celu:
AP = 4 - 1 = 3 (1.43)
Aby znaleźć odległość TP, robimy to samo, ale z komponentami x:
TP = 8 - 2 = 6 (1.44)
Teraz, gdy TP i AP są znane, odległość od łucznika do celu można obliczyć za pomocą twierdzenia Pitagorasa:
TA = √AP2 + TP2 = √ 32 + 62 = √9+36 = 6,71 (1.45) Dobrze w docelowym zakresie. Niech ta strzała leci!

Tajemnice SohCahToa odsłonięte

Jeśli znasz długość jednego z boków trójkąta prostokątnego i jeden z pozostałych dwóch kątów, możesz określić wszystko inne o trójkącie za pomocą trygonometrii. Najpierw spójrz na rysunek. Pokazuje nazwy każdej strony trójkąta prostokątnego.



Strona naprzeciw kąta jest nazywana przeciwległą (zaskoczenie, niespodzianka), a strona leżąca między kątem a kątem prostym jest znana jako przyległa. Istnieją trzy funkcje trygonometryczne, które pomagają obliczyć cechy trójkąta prostokątnego. Prawdopodobnie znasz ich ze szkoły. Są sinus, cosinus i tangens i często są skracane do sin, cos i tan. Oto, co reprezentują:

sin( θ) = przeciwległa / przeciwprostokątna (1.46)
cos (θ) = przyległa / przeciwprostokątna (1.47)
tan(θ ) = przeciwległa / przyległa (1.48)

Gdy rozwiążesz którykolwiek z poniższych problemów na kalkulatorze, upewnij się, że jest on ustawiony w radianach, a nie stopniach! Spójrz na rysunek



Chcemy obliczyć długość przeciwległą , biorąc pod uwagę długość przyległej i kąt. Z SohCahToa możemy pamiętać, że tangens kąta jest równa przeciwległej podzielonej przez przyległą. Trochę przestawienie równania daje nam:
o= aTan(θ) (1.49)
Więc wszystko, co musimy zrobić, aby uzyskać o, to wziąć kalkulator (w celu ustalenia stycznej) i podłączyć liczby, w ten sposób:
o = 6Tan(0.9) = 7.56 (1,50)
Bułka z masłem. Dobra, spróbujmy innego, tylko tym razem spróbujesz go najpierw rozwiązać. Oblicz długość boku h pokazanego na rysunku poniżej



Udało ci się? W tym przykładzie znamy kąt i odwrotnie. Pamiętając o SohCahToa, widzimy, że należy zastosować funkcję sinusoidalną, ponieważ sinus kąta jest równy odwrotności podzielonej przez przeciwprostokątną. Zmiana układu równania daje:

h = o/sin(θ) (1.51)
A podłączenie liczb daje:
h = 3/sin(0.3) = 10.15 (1,52)
Jak na razie dobrze. Co powiesz na problem pokazany na poniższym rysunku? Tym razem musisz znaleźć kąt, biorąc pod uwagę długości przyległej i przeciwprostokątnej



Tym razem naszym przyjacielem jest funkcja cosinus, ale podłączenie liczb stwarza problem.
cos(?) = 10/13 = 0.769 (1.53)
Wiemy, że cosinus kąta wynosi 0,769, ale jaki jest sam kąt? Jak się tego dowiadujemy? Cóż, kąt określa się za pomocą odwrotnego cosinusa. Zwykle jest to zapisywane jako cos -1. Wszystko, co musisz zrobić, to użyć odwrotnego przycisku cosinus na kalkulatorze (jeśli nie widzisz na kalkulatorze cos-1, być może będziesz musiał nacisnąć przycisk odwrotny przed przyciskiem cosinus), aby uzyskać wynik:
? = cos -1(0.769) = 0,693 radianów (1,54)
W tym momencie zakończę lekcję trygonometrii. Chociaż jest to obszerny temat, twierdzenie Pitagorasa i SohCahToa są teorią trygonometrii , której będziesz potrzebować w dalszej części

Wektory

Podczas projektowania sztucznej inteligencji do gier będziesz często używać matematyki wektorowej. Wektory są używane wszędzie, od obliczania kierunku, w którym agent gry powinien wystrzelić, aż do wyrażania wejść i wyjść sztucznej sieci neuronowej. Wektory są twoim przyjacielem. Powinieneś je dobrze poznać. Nauczyłeś się, że punkt na płaszczyźnie kartezjańskiej można wyrazić jako dwie liczby, tak jak poniżej: P = (x,y) (1,55)(1,55)
Zapisany wektor 2D wygląda prawie tak samo:
v = (x,y)(1,56)
Jednak chociaż jest podobny, wektor reprezentuje dwie cechy: kierunek i wielkość. Prawa strona rysunku 1.16 pokazuje wektor (9, 6) znajdujący się w punkcie początkowym.



Wektory są zwykle oznaczone pogrubioną czcionką lub literą ze strzałką nad nim. Położenie strzałki wskazuje kierunek wektora, a długość linii reprezentuje wielkość wektora. W porządku, jak dotąd tak dobrze. Ale co to znaczy? Jakie to ma zastosowanie? Na początek wektor może reprezentować prędkość pojazdu. Wielkość wektora reprezentuje prędkość pojazdu, a kierunek reprezentuje kierunek pojazdu. To całkiem sporo informacji z zaledwie dwóch liczb (x, y). Wektory też nie są ograniczone do dwóch wymiarów. Mogą mieć w ogóle dowolny rozmiar. Użyłbyś na przykład wektora 3D (x, y, z), aby przedstawić prędkość pojazdu poruszającego się w trzech wymiarach, jak helikopter. Rzućmy okiem na niektóre rzeczy, które możesz zrobić z wektorami.

Dodawanie i odejmowanie wektorów

Wyobraź sobie, że jesteś uczestnikiem telewizyjnej gry reality. Stoisz na polanie w dżungli. Obok ciebie stoi kilku innych konkurentów. Wszyscy jesteście bardzo zdenerwowani i podekscytowani, ponieważ zwycięzca poznaje Cameron Diaz… a przegrani muszą oglądać. Pot ścieka ci z czoła, twoje ręce są lepkie, a ty rzucasz nerwowe spojrzenia na innych konkurentów. Opiekun telewizyjny z brązową brodą podchodzi do przodu i podaje każdemu konkurentowi złotą kopertę. Cofa się i każe wam rozerwać koperty. Zwycięzcą zostanie pierwsza osoba, która wypełni instrukcje. Szaleńczo odrywasz papier. W środku jest notatka. To mówi: "Czekam na ciebie w tajnym miejscu. Pospiesz się, jest bardzo gorąco tutaj. Możesz dotrzeć do lokalizacji, postępując zgodnie z wektorami (-5, 5), (0, -10), (13, 7), (-4, 3)… Cameron"

Z uśmiechem na twarzy patrzysz, jak reszta zawodników biegnie w kierunku pierwszego wektora. Wykonujesz kilka obliczeń z tyłu koperty, a następnie leniwie spacerujesz w zupełnie innym kierunku. Zanim inni konkurenci dotrą do kryjówki Camerona, pocąc się jak stary ser i z trudem łapiąc oddech, słyszą twoje zabawne chichoty i plusk chłodnej wody z prysznica… Pokonałeś przeciwników, ponieważ wiedziałeś, jak dodawać wektory. Poniższy rysunek pokazuje trasę, którą przeszli pozostali konkurenci, postępując zgodnie z wektorami podanymi w notatce Cameron

Wiedziałeś jednak, że jeśli dodasz wszystkie wektory razem, otrzymasz w rezultacie pojedynczy wektor: ten, który zabierze cię bezpośrednio do ostatecznego celu. Aby dodać wektory razem, wystarczy dodać wszystkie wartości x, aby otrzymać składową x wyniku, a następnie zrobić to samo z wartościami y, aby uzyskać składową y. Dodając razem cztery wektory w notatce Camerona, otrzymujemy:
new x = (-5) + (0) + (13) + (-4) = 4
new y = (5) + (-10) + (7) + (3) = 5 (1.57)

dając wektor (4, 5), dokładnie taki sam wynik, jakbyśmy podążali za każdym wektorem osobno. Zobacz rysunek



Mnożenie wektorów

Mnożenie wektorów jest bardzo proste. Wystarczy pomnożyć każdy składnik przez wartość. Na przykład wektor v (4, 5) pomnożony przez 2 wynosi (8, 10).

Obliczanie wielkości wektora

Wielkość wektora to jego długość. W poprzednim przykładzie wielkość wektora v(4, 5) to odległość od punktu początkowego do kryjówki Cameron.



Można to łatwo obliczyć za pomocą twierdzenia Pitagorasa.
wielkość = √ 42 + 52 (1.58)
Gdybyś miał trójwymiarowy wektor, użyłbyś podobnego równania:
wielkość = √ x2 + y2 + z2 (1.59)
Matematycy umieszczają dwa pionowe paski wokół wektora, aby zaznaczyć jego długość.
wielkość = |v| (1,60)

Wektory normalizujące

Kiedy wektor jest znormalizowany, zachowuje swój kierunek, ale jego wielkość jest ponownie obliczana, tak że ma długość jednostkową (długość 1). W tym celu należy podzielić każdy składnik wektora przez wielkość wektora. Matematycy piszą taką formułę:
N = v/|v| (1.61)
Dlatego, aby znormalizować wektor (4, 5), zrobiłbyś to:
new x = 4 / 6.403 = 0.62
new y = 5 / 6.403 = 0.78 (1.62)

Może to wydawać się dziwne dla wektora, ale w rzeczywistości znormalizowane wektory są niezwykle przydatne. Dowiesz się wkrótce.

Rozwiązywanie wektorów

Możliwe jest użycie trygonometrii do rozdzielenia wektora na dwa oddzielne wektory, jeden równoległy do osi x, a drugi do osi y. Spójrz na wektor v, reprezentujący pchnięcie myśliwca odrzutowego pokazanego na rysunku



Aby rozdzielić v na jego składowe x / y, musimy znaleźć Oa i Ob. To da nam komponent ciągu samolotu, który działa odpowiednio wzdłuż osi y, i komponent wzdłuż osi x, odpowiednio. Innym sposobem na określenie tego jest to, że Oa jest wielkością siły działającej wzdłuż osi x, a Ob jest wielkością wzdłuż osi y. Najpierw obliczmy siłę ciągu wzdłuż osi y: Oa. Z trygonometrii wiemy, że:

cos (θ) = przyległa / przeciwprostokątna = Oa / |v| (1.63)
Zmiana układu daje:
Oa = |v| cos (θ) = składowa y (1.64)
Do obliczenia Ob stosuje się to równanie:
sin( θ) = przeciwległa / przeciwprostokątna (1.65)
Dające:
Ob = |v| sin( θ) = składowa x (1.66)

Iloczyn skalarny

Iloczyn skalarny podaje kąt między dwoma wektorami - coś, co trzeba często obliczyć podczas programowania AI. Biorąc pod uwagę dwa wektory 2D u i v, równanie wygląda następująco:
u • v = uxvx + uyvy (1.67)
Symbol • oznacza iloczyn skalarny. Równanie (1.67) nie daje nam jednak kąta. Obiecałem kąt, więc dostaniesz go! Oto inny sposób obliczania iloczynu kropkowego:
u • v = |u||v|cos(θ)(1.68)
Zmiana układu otrzymujemy:
cos(θ) = u • v / |u||v| (1.69)
Pamiętaj, że pionowe linie otaczające wektor wskazują jego wielkość. Nadszedł czas, kiedy odkryjesz jedno z przydatnych zastosowań normalizacji wektorów. Jeśli zarówno v, jak i u są znormalizowane, równanie ogromnie upraszcza:
cos(θ) = u • v / 1 x 1 = u • v (1.70)
Podstawienie w równaniu z (1.67) po prawej stronie daje:
cos(θ) = u • v = uxvx + uyvy (1.71)
dając nam równanie kąta między wektorami. Jednym wielkim zastosowaniem produktu kropkowego jest to, że szybko powie ci, czy jeden byt jest za czy przed płaszczyzną skierowaną w stronę drugiego. Jak to? Zobacz rysunek poniżej



Na rysunku pokazano agenta gry skierowanego bezpośrednio na północ. Linia pozioma odnosi się do agenta i opisuje płaszczyznę skierowaną do agenta. Wszystko, co znajduje się przed tą linią, można powiedzieć, że znajduje się przed agentem. Za pomocą iloczynu skalarnego łatwo jest ustalić, czy obiekt znajduje się przed czy za agentem. Iloczynskalarny wektora skierowanego do agenta i wektora od agenta do obiektu będzie dodatni, jeśli obiekt znajdzie się przed płaszczyzną skierowaną do agenta, a ujemny, jeśli będzie z tyłu.

Praktyczny przykład matematyki wektorowej

Oto przykład niektórych metod wektorowych, których nauczyłeś się o wspólnej pracy. Załóżmy, że masz agenta gry, Trolla Erica, który stoi w pozycji T (początek) i jest zwrócony w kierunku znormalizowanym wektorem H (na kurs). Czuje zapach bezradnej księżniczki w pozycji P i bardzo chciałby rzucić w nią pałką, delikatnie ją zmiękczyć, zanim rozerwie ją na kawałki. Aby to zrobić, musi wiedzieć, ile radianów musi obrócić, aby się z nią zmierzyć. Poniższy rysunek pokazuje sytuację.





Odkryłeś, że możesz obliczyć kąt między dwoma wektorami za pomocą iloczynu skalarnego. Jednak w tym problemie masz tylko jeden wektor, H. Dlatego musimy określić wektor - wektor, który wskazuje bezpośrednio na księżniczkę. Oblicza się to odejmując punkt T od punktu P. Ponieważ T jest na początku (0, 0), w tym przykładzie P - T = P. Jednak odpowiedź P - T jest wektorem, więc pokażmy to, wpisując go pogrubioną czcionką i nazywając ją P. Wiemy, że cosinus kąta, który troll musi obrócić w stronę księżniczki, jest równoważny iloczynowi H i P, pod warunkiem, że oba wektory są znormalizowane. H jest już znormalizowany, więc musimy tylko znormalizować P. Pamiętaj, aby znormalizować wektor, jego składniki są podzielone przez jego wielkość. W związku z tym normalna P (NP) wynosi
NP = P/|P| (1.72)
Iloczynu skalarnego można teraz użyć do określenia kąta.
cos(θ) = NP • H(1.73)
Więc
θ = cos-1 (NP • H)(1.74)
Aby wyjaśnić ten proces, zróbmy to jeszcze raz, ale z pewnymi liczbami. Powiedzmy, że troll znajduje się na początku T (0, 0) i ma nagłówek H (1, 0). Księżniczka stoi w punkcie P (4, 5). Ilu radianów musi odwrócić troll, by stanąć twarzą w twarz z księżniczką? Wiemy, że możemy użyć równania (1.74) do obliczenia kąta, ale najpierw musimy ustalić wektor TP między trollem a księżniczką i znormalizować go. Aby uzyskać TP, odejmujemy T od P, otrzymując wektor (4, 5). Aby znormalizować TP, dzielimy go według jego wielkości. Obliczenia te pokazano wcześniej w równaniu (1,62), co dało wynik NTP (0,62; 0,78). Na koniec wstawiamy liczby do równania (1.74), zastępując równanie (1.71) iloczynem skalarnym.
θ = cos-1 (NTP • H)
θ = cos-1 ((0,.62x1)) + ((0.78 x 0))
θ = cos-1(0.62)
θ = 0.902 radianów

Struktura Vector2D

Wszystkie przykłady podane w tej książce wykorzystują strukturę Vector2D. Jest to bardzo proste i realizuje wszystkie omówione operacje wektorowe. Wymienię tutaj większość jej deklaracji, abyś mógł się z nią zapoznać.

struct Vector2D
{
double x;
double y;
Vector2D():x(0.0),y(0.0){}
Vector2D(double a, double b):x(a),y(b){}
//ustawia x i y na zero
inline void Zero();
//zwraca wartość true, jeśli zarówno x, jak i y są równe zero
inline bool isZero()const
//zwraca długość wektora
inline double Length()const;
//zwraca kwadratową długość wektora (unikając w ten sposób sqrt)
inline double LengthSq()const;
inline void Normalize();
// zwraca iloczyn skalrny tego i v2
inline double Dot(const Vector2D& v2)const;
//zwraca wartość dodatnią, jeśli v2 jest zgodny z ruchem wskazówek zegara od tego wektora,
// ujemny, jeśli jest przeciwny do ruchu wskazówek zegara (zakładając, że oś Y jest skierowana w dół,
//oś X po prawej jak aplikacja Windows) inline int Sign(const Vector2D& v2)const;
//zwraca wektor, który jest prostopadły do tego
inline Vector2D Perp()const;
//dostosowuje x i y, aby długość wektora nie przekraczała max
inline void Truncate(double max);
//zwraca odległość między tym wektorem a tym przekazanym jako parametr
inline double Distance(const Vector2D &v2)const;
//kwadratowa wersja powyższego
inline double DistanceSq(const Vector2D &v2)const;
//zwraca wektor będący odwrotnością tego wektora
inline Vector2D GetReverse()const;
//potrzebujemy operatorów
const Vector2D& operator+=(const Vector2D &rhs);
const Vector2D& operator-=(const Vector2D &rhs);
const Vector2D& operator*=(const double& rhs);
const Vector2D& operator/=(const double& rhs;
bool operator==(const Vector2D& rhs)const;
bool operator!=(const Vector2D& rhs)const;
};

Przestrzeń lokalna i przestrzeń świata

Ważne jest, aby zrozumieć różnicę między przestrzenią lokalną a przestrzenią świata. Reprezentacja przestrzeni świata jest zwykle tym, co widzisz renderowane na ekranie. Każdy obiekt jest określony pozycją i orientacją względem początku światowego układu współrzędnych. Żołnierz wykorzystuje przestrzeń świata, gdy na przykład opisuje pozycję czołgu z odniesieniem do siatki.



Lokalna przestrzeń opisuje jednak położenie i orientację obiektów względem lokalnego układu współrzędnych określonego podmiotu. W dwóch wymiarach lokalny układ współrzędnych obiektu można zdefiniować za pomocą wektora skierowanego i wektora bocznego (reprezentującego odpowiednio lokalną oś x i y), z punktem początkowym umieszczonym w środku elementu (dla trzech wymiarów dodatkowy wymagany jest wektor). Rysunek 1.24 pokazuje oś opisującą lokalny układ współrzędnych obiektu w kształcie strzałki



Za pomocą tego lokalnego układu współrzędnych możemy przekształcić świat, tak aby wszystkie znajdujące się w nim obiekty opisały swoją pozycję i orientację względem niego. To jest jak oglądanie świata oczami istoty. Żołnierze używają miejscowej przestrzeni, gdy mówią takie rzeczy, jak "Cel 50 metrów od siebie o godzinie 10". Opisują lokalizację celu w stosunku do własnej pozycji i kierunku skierowania.



Ta zdolność do przekształcania obiektów między przestrzenią lokalną a światową może uprościć wiele obliczeń, jak zobaczymy później.

Fizyka

Mój słownik definiuje fizykę jako:
"Nauka o materii i energii oraz interakcje między nimi"
Jako programista gier AI często będziesz pracować z prawami fizyki, a zwłaszcza z poruszaniem się, o czym będzie mowa. Często zdarza się, że tworzysz algorytmy do przewidywania, gdzie w przyszłości będzie znajdować się obiekt lub agent, do obliczania najlepszego kąta strzału broni lub kierunku i siły, którą agent powinien kopnąć piłkę, aby podać do odbiorcy. To oczywiście nie jest sztuczna inteligencja, ale wszystko to jest częścią iluzji inteligencji i zwykle stanowi część obciążenia programisty AI, więc musisz znać te rzeczy. Rzućmy okiem na niektóre podstawowe pojęcia stosowane w fizyce.

Czas

Czas jest wielkością skalarną (całkowicie określoną przez wielkość i bez kierunku), mierzoną w sekundach, w skrócie s. Do niedawna definiowano sekundę w kategoriach rotacji obrotowej Ziemi, ale ponieważ obroty Ziemi nieznacznie zwalniają co roku, pod koniec lat sześćdziesiątych stało się to problematyczne dla naukowców, którzy potrzebowali coraz bardziej precyzyjnych pomiarów w swoich eksperymentach. Dzisiaj zatem sekundę mierzy się jako: Czas trwania 9 192 621,770 okresów promieniowania odpowiadających przejściu między dwoma hiper drobnymi poziomami stanu podstawowego atomu cezu 133. Ta definicja zapewnia dzisiejszym naukowcom stały przedział czasu wymagany do ich precyzyjnych eksperymentów. Czas w grach komputerowych jest mierzony na jeden z dwóch sposobów: w sekundach (tak jak w prawdziwym świecie) lub przy użyciu odstępu czasu między aktualizacjami jako rodzaj wirtualnej sekundy. Ten ostatni pomiar może uprościć wiele równań, ale musisz być ostrożny, ponieważ, chyba że szybkość aktualizacji jest zablokowany, fizyka będzie się różnić między maszynami o różnych prędkościach! Dlatego jeśli zdecydujesz się użyć wirtualnej sekundy, upewnij się, że częstotliwość aktualizacji fizyki gry jest zablokowana na rozsądnym poziomie - zwykle jest to szybkość najwolniejszej maszyny, dla której się rozwijasz. Nie tak dawno temu większość gier komputerowych używała stałej liczba klatek na sekundę i każdy element - rendering, fizyka, sztuczna inteligencja itp. - był aktualizowany z tą samą częstotliwością. Wiele współczesnych wyrafinowanych gier określa jednak niepowtarzalną stawkę dla każdego elementu. Na przykład fizyka może być aktualizowana 30 razy na sekundę, AI 10 razy na sekundę, a kod renderowania może działać tak szybko, jak maszyna, na której działa. Dlatego za każdym razem, gdy mówię o "częstości aktualizacji" w tekście, jeśli nie określę kontekstu, będzie to w kontekście tematu, o którym mówię.

Odległość

Standardową jednostką odległości - wielkości skalarnej - jest to metr , w skrócie m.

Masa

Masa jest wielkością skalarną mierzoną w kilogramach, w skrócie do kg. Masa jest miarą ilości czegoś. Może to być myląca jakość do zmierzenia, ponieważ masę obiektu oblicza się przez jego zważenie, ale masa nie jest jednostką masy; jest to jednostka materii. Ciężar obiektu jest miarą siły grawitacji działającej na ten obiekt. Ponieważ grawitacja zmienia się w zależności od miejsca (nawet tutaj na Ziemi), oznacza to, że ciężar obiektu może się różnić w różnych miejscach, nawet jeśli jego masa nigdy się nie zmienia. Jak więc dokładnie zmierzyć masę? Naukowcy pokonali ten problem, tworząc cylinder platynowo-irydowy, który wszyscy zgodzili się nazywać THE kilogram. Ten cylinder jest przechowywany w Paryżu i wszystkie pomiary są wykonywane względem niego. Innymi słowy, możesz udać się do Francji i zrobić swój własny duplikat, który waży dokładnie tyle samo, co THE kilogram. Teraz wiesz, że gdziekolwiek się znajdujesz, bez względu na grawitację, twój duplikat będzie miał dokładnie taką samą masę jak THE kilogram we Francji. Problem rozwiązany

Pozycja

Możesz myśleć, że pozycja obiektu jest łatwą do zmierzenia właściwością, ale skąd dokładnie mierzysz jego pozycję? Na przykład, jeśli chcesz określić pozycję ciała w przestrzeni, skąd wziąłbyś pomiar? Czy byłoby to z twoich stóp, brzucha czy głowy? Stanowi to problem, ponieważ istniałaby duża rozbieżność między pozycją głowy a pozycją stóp. Fizycy rozwiązują ten problem, przyjmując położenie środka masy obiektu za jego pozycję. Środek masy jest punktem równowagi obiektu. Byłoby to miejsce, w którym można przymocować wyimaginowany kawałek sznurka do obiektu i balansowałby w dowolnej pozycji. Innym dobrym sposobem myślenia o środku masy jest to, że jest to średnia lokalizacja całej masy w ciele.

Prędkość

Prędkość jest wielkością wektorową (wielkością, która ma wielkość i kierunek), która wyraża szybkość zmiany odległości w czasie. Standardową jednostką miary prędkości są metry na sekundę, w skrócie m / s. Można to wyrazić matematycznie jako:

v = ∆x / ∆ t(1.75)

Wielka litera grecka ∆, czytana jako delta, jest używana w matematyce do oznaczania zmiany ilości. Dlatego ∆t w równaniu (1,75) reprezentuje zmianę czasu (przedział czasu), a ∆x zmianę odległości (przemieszczenie). oblicza się jako ilość po odjęciu minus ilość przed. Dlatego jeśli pozycja obiektu przy t = 0 wynosi 2 (przed), a przy t = 1 wynosi 5 (po), ∆x wynosi 5 - 2 = 3. Może to również powodować wartości ujemne. Na przykład, jeśli pozycja obiektu przy t = 0 wynosi 7 (przed), a przy t = 1 wynosi 3 (po), ∆x wynosi 3 - 7 = -4. UWAGA Młodszy brat Delty, delta małymi literami, zapisany jako δ, jest używany do przedstawienia bardzo małych zmian. Często widzisz δużywane w rachunku różniczkowym. Ponieważ wygląda podobnie do litery d, aby zapobiec nieporozumieniom, matematycy zwykle unikają używania d do reprezentowania odległości lub przesunięcia w swoich równaniach. Zamiast tego używany jest mniej niejednoznaczny symbol, taki jak ∆ x.

Za pomocą równania (1.75) łatwo jest obliczyć średnią prędkość obiektu. Powiedzmy, że chcesz obliczyć średnią prędkość piłki toczącej się między dwoma punktami. Najpierw obliczyć przesunięcie między dwoma punktami, a następnie podzielić przez czas potrzebny piłce na pokonanie tej odległości. Na przykład, jeśli odległość między punktami wynosi 5 m, a czas potrzebny na przemieszczenie piłki między punktami wynosi 2 s, wówczas prędkość wynosi:

v = 5/2 = 2.5 m/s(1.76)

Łatwo jest również obliczyć, jak daleko przeszedł obiekt, jeśli go znamy średnią prędkość i czas podróży. Załóżmy, że jedziesz samochodem z prędkością 35 km / h i chcesz wiedzieć, jak daleko się przeszedłeś w ciągu ostatnich pół godziny. Zmiana układu równania (1.75) daje:

Δ x = vΔ t(1.77)

Podanie liczb daje:

przebyta odległość = 35 x1/2 = 17.5 mil(1.78)

Odnosząc się do gier komputerowych, jeśli masz pojazd w pozycji P w czasie t poruszający się ze stałą prędkością V, możemy obliczyć jego pozycję w następnym kroku aktualizacji (w czasie t + 1) przez:

Pt+1 = Pt + VΔt(1.79)

Gdzie VΔt oznacza przesunięcie między krokami aktualizacji (z równania (1.77)). Wyjaśnijmy to, pokazując przykładowy kod. Poniżej znajduje się lista klas pojazdów, która opisuje ruch pojazdu poruszającego się ze stałą prędkością.

class Vehicle
{
//wektor reprezentujący jego pozycję w przestrzeni
vector m_vPosition;
//wektor reprezentujący jego prędkość
vector m_vVelocity;
public:
//wywołał każdą ramkę, aby zaktualizować pozycję pojazdu
void Update(float TimeElapsedSinceLastUpdate)
{
m_vPosition += m_vVelocity * TimeElapsedSinceLastUpdate;
}
};

Zauważ, że jeśli twoja gra używa stałej częstotliwości aktualizacji fizyki, podobnie jak wiele przykładów , Δt będzie stały i może zostać wyeliminowany z równania. Powoduje to uproszczoną metodę aktualizacji w następujący sposób:
// aktualizacja do symulacji przy użyciu stałego kroku aktualizacji
void Vehicle :: Update ()
{
m_vPosition + = m_vVelocity;
}

Pamiętaj jednak, że jeśli zdecydujesz się na wyeliminowanie tego w ten sposób, jednostką czasu, której będziesz używać w jakichkolwiek obliczeniach, nie jest już drugi, ale raczej odstęp czasu między krokami aktualizacji.

Przyśpieszenie

Przyspieszenie to wielkość wektorowa, która wyraża szybkość zmiany prędkości w czasie i jest mierzona w metrach na sekundę na sekundę, zapisywana jako m / s2. Przyspieszenie można wyrazić matematycznie jako:

a = Δv / Δt (1.80)

To równanie mówi, że przyspieszenie jest równoważne zmianie prędkości obiektu podzielonej przez przedział czasu, podczas którego nastąpiła zmiana prędkości. Na przykład, jeśli samochód zaczyna od spoczynku i przyspiesza z prędkością 2 m / s2, wówczas co sekundę do prędkości dodaje się 2 m / s. Tabela

Czas (y) : Prędkość (m / s)

0 : 0
1 : 2
2 : 4
3 : 6
4 : 8
5 : 10

Rysując te dane na wykresie prędkości w funkcji czasu, otrzymujemy rysunek poniżej.



Jeśli zbadamy przedział czasu, powiedzmy przedział między t = 1 i t = 4, możemy zobaczyć, że gradient nachylenia, podany przez Δv / Δt, jest równoważny przyspieszeniu w tym przedziale. Nauczyłeś się wcześniej, jak równanie y = mx + c definiuje wszystkie linie proste na płaszczyźnie kartezjańskiej 2D, gdzie m jest gradientem ic przecięciem na osi y. Ponieważ na podstawie rysunku powyżej możemy wywnioskować, że stałe przyspieszenie jest zawsze wykreślane jako linia prosta, możemy odnieść to równanie do przyspieszenia samochodu. Wiemy, że oś y reprezentuje prędkość, v, a oś x reprezentuje czas, t. Wiemy również, że gradient m odnosi się do przyspieszenia. To daje równanie:

v= at + u (1.81)

Stała u reprezentuje prędkość samochodu w czasie t = 0, co można przedstawić jako przecięcie linii na osi y. Na przykład, jeśli samochód w przykładzie wystartował z prędkością 3 m / s, wówczas wykres byłby identyczny, ale przesunięty w górę o 3, jak pokazano na rysunku poniżej



Aby przetestować równanie, ustalmy, jaka będzie prędkość samochodu rozpoczynająca się od prędkości 3 m / s i przyspieszająca przy 2 m / s2 po 3 sekundach. Wprowadzenie liczb do równania (1.81) daje:

v = 2 x 3 +3

v = 9 m/s (1.82)

To właśnie możemy wywnioskować z wykresu.



Kolejną interesującą rzeczą związaną z wykresem prędkości i czasu jest to, że obszar pod wykresem między dwa razy jest równoważny odległości przebytej przez obiekt w tym czasie. Najpierw spójrzmy na prosty przykład. Poniższy rysunek pokazuje wykres zależności czasu od prędkości dla pojazdu, który spędza 2 sekundy przy prędkości 4 m / s, a następnie zatrzymuje się



Obszar pod wykresem (obszar zacieniowany na szaro) jest określony przez szerokość, która jest równoważna czasowi prędkości, który, jak widać, daje wynik 8 metrów. Jest to ten sam wynik z zastosowania równania x = v Δt. Poniższy rysunek pokazuje przykład z wcześniejszego okresu, w którym pojazd przyspiesza od spoczynku ze stałym przyspieszeniem 2 m / s2. Powiedzmy, że chcielibyśmy obliczyć odległość przebytą między czasami t = 1 it = 3



Wiemy, że odległość przebyta między t = 1 i t = 3 to obszar pod wykresem między tymi czasami. Jak wyraźnie pokazano na rysunku, jest to suma obszarów prostokąta A i trójkąta B. Obszar A jest określony przez przesunięcie czasowe, t, pomnożone przez prędkość początkowa, u, zapisana jako:

Obszar A = Δt x u (1.83)

Obszar B, trójkąta, jest połową pola prostokąta opisanego przez boki trójkąta. Boki trójkąta podane są przez przesunięcie czasowe, t oraz różnicę między prędkością końcową a prędkością początkową, v - u. Można to zapisać jako:

Obszar(B) = 1/2 ⋅ (v-u)Δt(1.84) Dlatego całkowity obszar pod wykresem między czasami t = 1 it = 3, który jest równoważny przebytej odległości, jest sumą tych dwóch składników, podanych jako:

Δx = uΔt + 1/2 ⋅(v-u)Δt (1.85)

v- u = Δv = aΔt (1.86) Wartość v - u można podstawić do równania (1.85), aby uzyskać równanie, które odnosi odległość do czasu i przyspieszenia.

Δx = uΔt + 1/2 ⋅aΔt2(1.87)

Umieszczenie liczb w tym równaniu daje:

Δx = 2 x 2 + 1 / 2 x 2 x 22

Δx = 4 + 4

Δx = 8 m (1.88)

Za pomocą tego równania możemy zrobić kolejną przydatną rzecz: Możemy uwzględnić czas, aby uzyskać równanie dotyczące prędkości i przebytej odległości. Oto jak. Z równania (1.81) wiemy, że:

Δt = v- u / a (1.89)

Możemy zastąpić tę wartość Δt równaniem (1.87), aby uzyskać:

Δx = u( v-u/a) + 1/2 ⋅a(v-u/a)2 (1.90)

To paskudnie wyglądające równanie można znacznie uprościć. (Jeśli dopiero zaczynasz przygodę z algebrą, sugeruję próbę uproszczenia jej samemu.

v2 = u2 + 2aΔ(1.91)

To równanie jest niezwykle przydatne. Na przykład możemy go użyć do ustalenia, jak szybko piłka upuszczona ze szczytu Empire State Building będzie podróżować, gdy uderzy o ziemię (zakładając brak oporu powietrza z powodu wiatru lub prędkości). Przyspieszenie spadającego obiektu wynika z siły wywieranej na niego przez pole grawitacyjne Ziemi i jest równoważne około 9,8 m / s2. Prędkość początkowa piłki wynosi 0, a wysokość Empire State Building wynosi 381 m. Umieszczenie tych wartości w równaniu daje:

v2 = 02 + 2 x 9,8 x 381

v = √7467,6

v= 86,41 m/s (1.92) Powyższe równania są prawdziwe dla wszystkich obiektów poruszających się ze stałym przyspieszeniem, ale oczywiście możliwe jest również poruszanie się obiektów z różnym przyspieszeniem. Na przykład, samolot podczas startu z pasa startowego ma wysokie przyspieszenie na początku swojego biegu (które odczuwasz jako siłę popychającą cię do oparcia siedzenia), która zmniejsza się w miarę osiągania limitów mocy silnika . Ten rodzaj przyspieszenia wyglądałby mniej więcej tak, jak pokazano na rysunku



Jako kolejny przykład, poniższy rysunek pokazuje wykres prędkości w funkcji czasu dla samochodu, który przyspiesza do 30 km / h, hamuje gwałtownie, aby uniknąć zbłąkanego psa, a następnie przyspiesza z powrotem do 30 km / h.



Gdy masz różne przyspieszenia, takie jak te, możesz określić przyspieszenie tylko w określonym czasie. Osiąga się to poprzez obliczenie gradientu stycznej do krzywej w tym punkcie.

Siła

Według Isaaca Newtona: Odciśnięta siła to działanie wywierane na ciało w celu zmiany jego stanu, albo spoczynku, albo równomiernego ruchu we właściwej linii.

Dlatego siła jest tą jakością, która może zmienić prędkość obiektu lub linię ruchu. Siła nie ma jednak nic wspólnego z samym ruchem. Na przykład latająca strzała nie potrzebuje stałej siły przyłożonej do niej, aby mogła latać (jak sądził Arystoteles). Siła jest obecna tylko tam, gdzie zachodzą zmiany ruchu, takie jak zatrzymanie strzały przez obiekt lub gdy kierowca przeciągający przyspiesza wzdłuż paska. Jednostką siły jest Newton, w skrócie N, i jest zdefiniowany jako:

Siła potrzebna do przesunięcia masy kilogramowej z spoczynku do prędkości jednego metra na sekundę w ciągu jednej sekundy.

Istnieją dwa różne rodzaje sił: siły kontaktowe i bezdotykowe. Siły kontaktowe występują między dotykającymi się obiektami, takimi jak siła tarcia występująca między śniegiem a nartami zjazdowego narciarza. Siły bezkontaktowe to takie, które występują między obiektami, które się nie stykają, takie jak siła grawitacji Ziemi na ciele lub siła magnetyczna Ziemi na igle kompasu. Należy zauważyć, że wiele sił może oddziaływać na pojedynczy obiekt jednocześnie. Jeśli suma tych sił jest równa zero, obiekt pozostaje w ruchu z tą samą prędkością w tym samym kierunku. Innymi słowy, jeśli obiekt jest nieruchomy lub porusza się w linii prostej ze stałą prędkością, suma wszystkich działających na niego sił musi wynosić zero. Jeśli jednak suma sił nie jest równa zero, obiekt przyspieszy w kierunku siły wynikowej. Może to być mylące, szczególnie w odniesieniu do obiektów statycznych. Na przykład, w jaki sposób siły działające na jabłko siedzące na stole? W końcu się nie rusza! Odpowiedź jest taka, że na jabłko działają dwie siły: siła grawitacji próbuje przyciągnąć jabłko do Ziemi i równa i przeciwna siła od stołu odsuwa je od Ziemi. To dlatego jabłko pozostaje nieruchome.

Wiemy, że jeśli suma sił działających na obiekt jest różna od zera, przyspieszenie będzie przekazywane w kierunku siły; ale ile przyspieszenia? Odpowiedź jest taka, że wielkość przyspieszenia a jest proporcjonalna do masy obiektu, m, i do przyłożonej siły całkowitej, F. Zależność tę podaje równanie:

a = F/m (1.93)

Częściej jednak zobaczysz to równanie zapisane jako:

F = ma (1.94)

Korzystając z tego równania, jeśli wiemy, jak szybko obiekt przyspiesza i jego masa, możemy obliczyć całkowitą siłę działającą na niego. Wykorzystując równania siły, przyspieszenia, prędkości i położenia, jeśli wiemy, ile siły działa na obiekt, możemy określić przyspieszenie wynikające z tej siły i odpowiednio zaktualizować położenie i prędkość obiektu. Załóżmy na przykład, że masz klasę statku kosmicznego z atrybutami masy, aktualnej prędkości i aktualnej pozycji. Coś takiego:

class SpaceShip
{
private:
vector m_Position;
vector m_Velocity;
float m_fMass;
public:
…
};

Biorąc pod uwagę odstęp czasu od ostatniej aktualizacji i siłę, którą należy zastosować, możemy stworzyć metodę, która aktualizuje pozycję i prędkość statku. Oto jak:

void SpaceShip::Update(float TimeElapsedSinceLastUpdate, float ForceOnShip)
{
float acceleration = ForceOnShip / m_fMass;

Przede wszystkim obliczyć przyspieszenie wynikające z siły za pomocą równania (1.93)

m_Velocity += acceleration * TimeElapsedSinceLastUpdate;

Następnie zaktualizuj prędkość przyspieszenia za pomocą równania (1.80)

m_vPosition += m_Velocity * TimeElapsedSinceLastUpdate;
}

Na koniec pozycję można zaktualizować za pomocą zaktualizowanej prędkości za pomocą równania (1.77).