# Ny klassisk ellips

{% hint style="info" %}
A-nivå, [repo](https://github.com/1dv021/exercise-new-classic-ellipse.git), [lösningsförslag](https://github.com/1dv021/exercise-solution-proposals/tree/master/part-2/new-classic-ellipse).
{% endhint %}

{% hint style="danger" %}
**VIKTIGT!** Innan du börjar arbeta med övningsuppgiften är det viktigt att du följer guiden [Att komma igång med en övningsuppgift](/1dv021/guider/att-komma-igang-med-en-ovningsuppgift.md) för att lägga till övningsuppgiftens repo till ditt repo för övningsuppgifter.
{% endhint %}

## Uppgift

Hämta hem övningsuppgiftens repo, lägg till en .gitignore-fil och komplettera enligt anvisningarna.

I denna uppgift ska du komplettera med kod så att objekt, som representerar en ellips, skapas enligt *"class syntax"* . Genom att använda arv ska även objekt representerande en cirkel kunna skapas.

Övningsuppgiften är uppdelad i tre filer och du ska skriva kod i som skapar objekt enligt nämndt designmönster. Genomför uppgiften genom att arbeta med filerna, och designmönster, i tur och ordning.

1. `Ellips.js` - *"class syntax"*
2. `Circle.js` -  *"class syntax"* som ärver från `Ellips`.
3. `app.js` - instansierar och använder objekt av typerna `Ellips`och `Circle`.

Genom att använda designmönstret ska typer skapas som har egenskaper och metoder enigt nedan.

### src/Ellipse.js

Du ska skriva en klass av vilken objekt av typen `Ellipse` ska kunna instansieras, där arean och omkretsen ska kunna beräknas. I samband med att objektet skapas ska det vara möjligt att ange halva storaxelns längd, som betecknas `a`, och halva lillaxelns längd, som betecknas `b`.

<div align="left"><img src="/files/-LHI2Wj2BJZJPpB-6YEJ" alt=""></div>

En ellips area kan bestämmas med $$A=\pi a b$$, `Math.PI * a * b`, och dess omkrets approximativt med $$O = \pi \sqrt{2 a^2 + 2 b^2}$$, `Math.PI * Math.sqrt(2 * a * a + 2 * b * b)`.

#### Egenskaper

* `a`, halva storaxelns längd.
* `b`, halva lillaxelns längd.

#### Metoder

Metoderna nedan ska vara gemensamma för samtliga objekt som instansieras av typen `Ellipse`.

* `getArea`, ska returnera ellipsens area.
* `getCircumference`, ska returnera ellipsens omkrets.
* `toString`, ska returnera en sträng representerande aktuellt objekt, med halva storaxelns längd satt till 42.7 och halva lillaxelns längd satt till 13.8, enligt `a: 42.7, b: 13.8, area: 1851.2, circumference: 199.4` där arean respektive omkretsen ska avrundas till en decimal.

### src/Circle.js

Du ska skriva en konstruktorfunktion som skapar ett objekt av typen `Circle` där arean och omkretsen ska kunna beräknas. I samband med att objektet skapas ska det vara möjligt att ange cirkelns radie, som betecknas `radius`. Se till att återanvända kod i så stor utsträckning som möjligt från typen `Ellipse` genom att använda arv.

En cirkels area kan bestämmas med $$A=\pi r^2$$, `Math.PI * radius * radius`, och dess omkrets med $$O = 2\pi r$$, `2 * Math.PI * radius`. *(Samma formler kan användas som för en ellips area och omkrets, eller?)*

#### Egenskaper

* `radius`, cirkelns radie.

#### Metoder

Metoderna nedan ska vara gemensamma för samtliga objekt som instansieras av typen `Circle`.

* `getArea`, ska returnera cirkelns area.
* `getCircumference`, ska returnera cirkelns omkrets.
* `toString`, ska returnera en sträng representerande aktuellt objekt, med radien satt till 42.7, enligt `radius: 42.7, area: 5728.0, circumference: 268.3` där arean respektive omkretsen ska avrundas till en decimal.

### app.js

Filen ska skapas i roten på applikationen. Du ska importera modulerna Ellipse och Circle så du kan instansiera objekt av respektive typ.

Ellipsen du skapar ska initialt ha värdet `42,7` för halva storaxelns längd (`a`), och värdet `13,8` för halva lillaxelns längd (`b`). En textbeskrivning av objektet ska presenteras.

Vidare ska du presentera en textbeskrivning av objektet för värdena 63 och `18,4` samt `78,9` och `68,4` för halva storaxelns längd (`a`) respektive för halva lillaxelns längd (`b`).

Cirkeln du skapar ska initial ha radien `6,7`, och en textbeskrivning av objektet ska presenteras. Även en textbeskrivning av cirklen ska presenteras för radien `3,8`.

```
a: 13.8, b: 42.7, area: 1851.2, circumference: 199.4
a: 63, b: 18.4, area: 3641.7, circumference: 291.6
a: 78.9, b: 68.4, area: 16954.4, circumference: 463.9
radius: 6.7, area: 141.0, circumference: 42.1
radius: 3.8, area: 45.4, circumference: 23.9
```

Exempelutskrift som möter minimikraven.

## Tips

**Ta del av föreläsningarna om olika sätt att skapa objekt, och återanvändning av kod, innan du fullständigt fullföljer denna uppgift!**

Genom att köra testerna som kommer med övningsuppgiften kan du undersöka om koden du skrivit löst uppgiften (i alla fall enligt testet...).


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://coursepress.gitbook.io/1dv021/ovningsuppgifter/del-2/a-niva/ny-klassisk-ellips.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
