De volgorde van de sectoren van een normaal dartsbord is (te beginnen bovenaan de cirkel) \((20, 1, 18, 4, 13, 6, 10, 15, 2, 17, 3, 19, 7, 16, 8, 11, 14, 9, 12, 5)\). Omdat de nummering zo door elkaar loopt, speelt geluk een veel minder belangrijke rol. De nummering is nu zo geplaatst dat naast ieder hoog getal twee lage getallen zitten: 20, 1 en 5; 19, 7 en 3; 18, 1 en 4; 17, 2 en 3. Het gebruik van deze nummering zorgt ervoor dat niet de speler met het meeste geluk wint, maar de speler die de techniek het best beheerst.
Scorenotatie bij darts (zie ook Dart score1 )
- BULL: het centrum van het dartbord (rode cirkel in het midden) levert \(50\) punten op.
- getal : de behaalde score. Voor de single bull of outer bullseye (groene ring in het midden) is dit \(25\). Voor de twee bredere ringen(afwisselend zwart en wit) is dit het aantal punten voor die sector, zoals aangeduid op de rand van het bord.
- Tgetal: in de kleinste smalle ring, de triple ring (afwisselend rood en groen). Deze zone levert drie maal het puntenaantal op dat vermeld staat op de rand van het bord. Om aan te geven dat de score verdriedubbeld, worden de punten van de sector voorafgegaan door de letter T(riple), bijvoorbeeld T14 = \(42\).
- Dgetal: in de buitenste smalle ring, de double ring (afwisselend rood en groen). Als de pijl in dit gebied landt, levert dit twee keer het aantal punten op dat bij het betreffende vak staat. Om aan te geven dat de score verdubbeld, worden de punten van de sector voorafgegaan door de letter D(ouble), bijvoorbeeld D8 = \(16\).
- MISS: de buitenste zwarte rand (waar de cijfers staan), naast het bord of als de dart uit het bord valt. Dit levert geen punten op.
- Merk op dat BULL en MISS gebruikt worden in de scorenotatie.
Schrijf de functie score_darts(pijl, sectoren), die de score bepaalt (in de scorenotatie). De eerste parameter is een tuple pijl met de \((x, y)\)-coördinaten van de pijl. Dit stelt de positie \((x, y)\) van de pijl voor in het carthesisch coördinatenstelsel met oorsprong in het centrum van de bull’s eye, en worden uitgedrukt in millimeter (met kommagetallen). De tweede parameter sectoren is ook een tuple met positieve natuurlijke getallen. Het aantal getallen in die reeks bepaalt het aantal sectoren waarin het dartbord verdeeld wordt. De getallen zelf bepalen de punten per sector. Hierbij worden de sectoren in wijzerzin doorlopen, te beginnen bij de sector die de punten op de positieve Y-as bevat. Er wordt niet altijd met de officiële reeks \((20, 1, 18, 4, 13, 6, 10, 15, 2, 17, 3, 19, 7, 16, 8, 11, 14, 9, 12, 5)\) gewerkt. Zowel de punten, als het aantal sectoren kan verschillen.
De functie moet de behaalde score als string teruggeven, in de scorenotatie die hiervoor herhaald werd.
\(n\) is het aantal sectoren op het dartsbord. De figuur hiernaast toont hoe je een hoek in poolcoördinaten (\(\theta\); de groene hoek) kunt omzetten naar een sectorhoek (\(\beta\); de rode hoek), die start bij de linkerkant van de eerste sector. Gebruik voor de sectorhoek \(\beta\) een hoek in \([0, 2 \pi]\).
Met een beetje goniometrie is in te zien dat \(\beta + \theta = \frac{\pi}{2} + \frac{\pi}{n}\) waarbij \(n\) het aantal sectoren voorstelt. Hieruit kan je de hoek \(\beta\) berekenen en zorg dat \(\beta \in [0, 2 \pi]\)
Je weet bovendien dat één sector overeenkomt met een hoek van \(\frac{2\pi}{n}\). Bereken uit de sectorhoek \(\beta\) de index van de sector. De eerste sector (deze bovenaan de Y-as) heeft index 0, die rechts ervan index 1, enzoverder in wijzerzin.
De afmetingen van het dartbord zijn dezelfde als in de oefening Dartbord - voorbereiding2 en worden aangegeven in bovenstaande figuur. De double ring en triple ring zijn telkens 9.6 mm breed. Bij het bepalen van de positie zijn de grenzen niet inclusief, anders zit de pijl op de metalen rand van het gebied. Je mag er van uitgaan dat er niet op de metalen rand gegooid zal worden.
Voor de duidelijkheid werden een letter toegekend aan een aantal voorbeelden en weergegeven in onderstaande figuur.
>>> sectoren = (20, 1, 18, 4, 13, 6, 10, 15, 2, 17, 3, 19, 7, 16, 8, 11, 14, 9, 12, 5)
>>> score_darts((137, 0), sectoren) # C, bed
"6"
>>> score_darts((104.5, 0), sectoren) # D, triple ring
"T6"
>>> score_darts((0, 200), sectoren) # E, buiten
"MISS"
>>> score_darts((0, 166.3), sectoren) # F, double ring
"D20"
>>> score_darts((-30,22), sectoren) # G, bed
"9"