Python och trigonometri
Lite uppfräschning av trigonometri och Python är aldrig fel. Här får vi lära oss hur man kan rita upp rätvinkliga trianglar – direkt i Python – om vi känner till två av sidorna. För detta kommer vi att använda modulerna turtle och math.
För att kunna använda turtle-modulen behöver vi även installera TkInter för Python. Använder du Windows eller macOS är detta redan gjort, det medföljer nämligen standardinstallationen. Använder du däremot Linux behöver du oftast installera den själv. Följ nedanstående anvisningar för just din Linuxdistribution. Observera att nedanstående kommandon måste köras som root-användaren.
- Debian/Ubuntu:
apt-get update && apt-get install python3-tk
- Fedora/CentOS/Red Hat:
dnf install python3-tkinter
För den som är lite ringrostig när det gäller trigonometri och Pythagoras sats finns utmärkta artiklar på matteboken.se. Här hittar du en artikel för trigonometri och en för Pythagoras sats.
När du känner att du behärskar den matematiska delen är det dags att börja
skriva kod. Det första vi måste göra är att inkludera modulerna för turtle
och math. Vi passar också på att lägga till en shebang. Detta gör vi för
att det ska gå att exekvera Pythonprogrammet direkt från kommandoraden, utan att
behöva ange python3
framför. Det första stycket kod ser alltså ut som nedan:
#!/usr/bin/env python3
import turtle
import math
Nästa steg bör bli att fråga efter längden på sidorna som vi känner till. I detta programmet antar vi att vi vet längden på den närstående och den motstående kateten. Det är således dessa sidorna programmet ska fråga efter.
Vi kommer här att använda input()
för att fråga efter sidorna. Observera att
input()
-funktionen alltid sparar det vi anger som strängar. Vi måste därför
omvandla dessa till flyttal. Det gör vi med float()
.
narliggande = float(input("Ange längd på den närliggande kateten: "))
motstaende = float(input("Ange längd på den motstående kateten: "))
Nu när vi har längden på sidorna kan vi räkna fram vinkeln på hypotenusans spets. För detta använder vi den inversa tangenten. På engelska benämns detta arc tangent. På miniräknare och grafräknare ser tangenten ofta ut så här: $tan^{-1}$. Formeln för att räkna ut vinkeln är således $tan^{-1}(\frac{a}{b})$ där $a$ är den motstående sidan och $b$ den närliggande.
Funktionens namn i math-modulen är atan()
.
vinkel = math.atan(motstaende/narliggande)
Nu kommer dock ett litet problem. Det är nämligen så att Python och math-modulen använder radianer istället för grader. Vi måste således göra om vinkeln till grader innan vi går vidare.
vinkel = math.degrees(vinkel)
Nästa steg blir att räkna fram längden på hypotenusan. Det kan vi göra med
Pythagoras sats, som säger att $ \sqrt{a^2 + b^2} $ ger oss hypotenusans längd
om $a$ är den motstående sidan och $b$ är den närliggande sidan. Kvadratroten i
math-modulen heter sqrt()
.
hypotenusa = math.sqrt((motstaende**2)+(narliggande**2))
Två *
-tecken är “upphöjt med” i Python.
Nu vet vi alla längder och vinklar vi behöver, så det är dags att skriva ut resultatet på skärmen.
print("Vinkeln är: %.2f grader" %(vinkel))
print("Hypotenusans längd är: %.2f" %(hypotenusa))
Nu kommer det riktigt roliga, nämligen att rita upp den rätvinkliga triangeln med turtle.
Vi börjar med att rita upp den närliggande kateten. Detta gör genom att gå
framåt, forward
, så långt som vi angav i början av programmet.
turtle.forward(narliggande)
Därefter måste vi vrida oss 90 grader åt vänster – det är ju rätvinklig triangel. Det gör vi med följande rad:
turtle.left(90)
Nu ritar vi ut den motstående sidan, på samma sätt som vi gjorde med den närliggande.
turtle.forward(motstaende)
Därefter måste vi vända oss 90 grader igen, så att “sköldpaddan” tittar åt rätt håll.
turtle.left(90)
Därefter vänder vi oss i exakt rätt vinkel, alltså den vinkel vi räknade fram tidigare för hypotenusans spets.
turtle.left(vinkel)
Till slut ritar vi ut hypotenusan med den längd vi fick fram genom Pythagoras sats.
turtle.forward(hypotenusa)
Nu måste vi även lägga in en extra rad för att inte fönstret med triangeln ska stängas så fort den ritat klart.
turtle.done()
Nu är det dags att testköra programmet! Som mått anger jag här 300 för den närliggande kateten och 150 för den motstående.
$> python3 trig.py
Ange längd på den närliggande kateten: 300
Ange längd på den motstående kateten: 150
Vinkeln är: 26.57 grader
Hypotenusans längd är: 335.41
Nedanstående bild visas i ett separat fönster.
Smidigt, inte sant? Nu slipper vi rita upp trianglarna själva; vi ber bara Python att göra jobbet åt oss. Modifiera gärna programmet så att det går att räkna ut de andra sidorna också.
Hela programmet visas i sin helhet här nedanför.
#!/usr/bin/env python3
# Importera de moduler vi behöver
import turtle
import math
# Fråga efter den närliggande och den motstående kateten
narliggande = float(input("Ange längd på den närliggande kateten: "))
motstaende = float(input("Ange längd på den motstående kateten: "))
# Räkna ut vinkeln med arc tan)
vinkel = math.atan(motstaende/narliggande)
# Python använder radianer istället för grader som standard, så
# omvandla till grader innan vi går vidare
vinkel = math.degrees(vinkel)
# Räkna ut hyptotenusan med hjälp av Pythoras sats
hypotenusa = math.sqrt((motstaende**2)+(narliggande**2))
# Skriv ut vinkeln och hypotenusans längd
print("Vinkeln är: %.2f grader" %(vinkel))
print("Hypotenusans längd är: %.2f" %(hypotenusa))
# Rita upp tringalen med Turtle-modulen
turtle.forward(narliggande)
turtle.left(90)
turtle.forward(motstaende)
turtle.left(90)
turtle.left(vinkel)
turtle.forward(hypotenusa)
turtle.done()
Nyhetsbrev
Nyhetsuppdateringar från tidningen direkt till din inkorg, helt kostnadsfritt. Avsluta när du vill.
Kommentarer
Kommentarsfältet är modererat. Det innebär att alla kommentarer granskas av ansvarig utgivare före publicering.
Du väljer själv om du vill ange ditt riktiga namn, en pseudonym eller vara helt anonym. Ingen registrering behövs.
Relaterade artiklar
-
Använd bc för att omvandla talsystem
Att kunna omvandla mellan olika talsystem med papper och penna är bra att kunna. Men ibland behöver vi bara ett svar – snabbt. Det här kan programmet
bc
hjälpa dig med. Programmetbc
finns i de flesta Unixliknande system, så som Linux, FreeBSD, macOS med flera. Förkortningenbc
står för Basic Calculator men benämns även Bench Calculator. -
Hur procent och bråktal hänger ihop
Procenttal kan skrivas som bråktal och vice versa. Att skriva om procent till bråktal kan därför hjälpa förståelsen för hur man räknar med procent.
-
Roliga egenskaper hos polygoner
Det finns många roliga och intressanta egenskaper hos polygonerna. Det mest intressanta är kanske polygonernas vinkelsumma, och hur dessa kan räknas fram genom att rita trianglar inuti polygonerna.
-
Ett av mina första nyttoprogram
Vilken nostalgi det var när jag gick igenom programmen på min gamla grafräknare från gymnasiet, en TI-83. Där hittade jag ett av mina första nyttoprogram jag någonsin skrivit. Det var ett program skrivit i ett språk kallat TI-BASIC, en version av Basic för Texas Instruments grafräknare. Året då jag skrev programmet är troligen år 2000 eller 2001.
Senaste nyheterna och inläggen
-
Avlyssna trafik på servern med Wireshark och TShark
Wireshark är ett ovärderligt verktyg för att felsöka nätverkskonfigurationer, applikationer, API:er, demoner och mycket annat. I kombination med
tshark
kan vi dessutom avlyssna trafiken på en server i realtid. -
Mysig stämning på sommarens första demoparty
I helgen var det Reunion 2024 i Kvidinge Folkets hus, sommarens första skånska demoparty. Partyt organiserades av Jesper “Skuggan” Klingvall. På plats fanns ett 30-tal besökare.
-
Sommarens skånska demopartyn
Årets sommar bjuder på två skånska demopartyn. Först ut är Reunion i Kvidinge den 28–30 juni. Därefter är det Pågadata i Örtofta den 9–11 augusti.
-
Riskerna med BankID som ingen pratar om
BankID är ett säkert och smidigt sätt att identifiera sig online. Men i takt med dess ökade popularitet och användning har det blivit en svag länk – en single point of failure – på mer än ett sätt.
-
Polisernas fängelsedomar står fast
Efter tre år är målet mot de två poliser som olovligen tog sig in i en berusad mans bostad i Landskrona och misshandlade honom klart. Högsta domstolen beslutade den sjätte mars att avvisa överklagan. Fängelsedomarna för poliserna står därmed fast.
Utvalda artiklar
-
Mysig stämning på sommarens första demoparty
I helgen var det Reunion 2024 i Kvidinge Folkets hus, sommarens första skånska demoparty. Partyt organiserades av Jesper “Skuggan” Klingvall. På plats fanns ett 30-tal besökare.
-
Datorparty i Landskrona
I helgen höll Syntax Society sitt årliga sommarparty. Platsen var en källarlokal i Landskrona där ett femtontal personer medverkade.
-
Det första Pågadata har ägt rum
I helgen ägde det första Pågadata rum – uppföljaren till Gubbdata. Platsen var Folkets Hus i Kvidinge. Organisatör av partyt var Johan “z-nexx” Osvaldsson med hjälp från Jesper “Skuggan” Klingvall. Partyt hade över 100 anmälda deltagare.
-
Även hovrätten fäller poliserna för att ha satt dit oskyldig
Hovrätten fastställer straffet för de två poliser som förra året dömdes till vardera ett års fängelse av Lunds tingsrätt för att ha misshandlat och satt dit en oskyldig man. De båda poliserna ska även betala skadestånd till mannen.
-
Retroloppis i Påarp
Idag var det retroloppis hos Andreas Nilsson i Påarp. På baksidan av huset fanns hundratals spel uppradade på långa bord. Trots friska vindar och sval temperatur var loppisen välbesökt.
CyberInfo Sverige är ett it- och medieföretag i nordvästra Skåne som tillhandahåller böcker, utbildningar, nyheter och konsulttjänster inom Linux, säkerhet och programmering.
CyberInfo Sverige är godkänd för F-skatt, är momsregistrerat och innehar
utgivningsbevis för webbplatsen www.cyberinfo.se.