Cvičení 3


  1. Elipsu v rovině lze zadat pomocí dvou ohnisek a jedné z poloos. Druhou poloosu už lze vždy dopočítat. Definujte třídu ellipse, která bude obsahovat slotyfocal-point-1 a focal-point-2. Sloty slouží k uchovávání dvou bodů, které jsou ohnisky elipsy. Volitelně můžete napsat metody pro přístup k těmto slotům (v níže uvedeném výpisu takové metody používáme; od příští kapitoly budete psát přístupové metody ke slotům povinně). Dále můžete ve třídě definovat další slot (sloty) na uchovávání potřebných informací o elipse.

  2. Definujte pro třídu ellipse metody major-semiaxis a minor-semiaxis, které vrátí délku hlavní (to je vždy ta delší) a vedlejší poloosy.

  3. Definujte pro třídu ellipse metody set-major-semiaxis a set-minor-semiaxis pro nastavení délky hlavní a vedlejší poloosy.

  4. Definujte pro třídu ellipse metodu current-center,která vráti novou instanci třídy point reprezentující střed elipsy

  5. Výstřednost elipsy je podíl vzdálenosti jejích ohnisek a délky hlavní osy (tj. dvojnásobku délky hlavní poloosy). Definujte pro třídu ellipse metodu eccentricity, která vrátí výstřednost elipsy.

Příklad volání

    
    CL-USER 1 > (setf e (make-instance 'ellipse))
    #<ELLIPSE 200B809F>

    CL-USER 2 > (setf (slot-value (focal-point-1 e) 'x) -1)
    -1

    CL-USER 3 > (setf (slot-value (focal-point-2 e) 'x) 1)
    1

    CL-USER 4 > (set-major-semiaxis e 2)
    #<ELLIPSE 200B809F>

    CL-USER 5 > (minor-semiaxis e)
    1.7320508

    CL-USER 6 > (* * *)
    3.0

    CL-USER 7 > (current-center e)
    #<POINT 21CD10A3>

    CL-USER 8 > (slot-value * 'x)
    0

    CL-USER 9 > (slot-value ** 'y)
    0

    CL-USER 10 > (eccentricity e)
    0.5

    CL-USER 11 > (set-minor-semiaxis e 1)
    #<ELLIPSE 200B809F>

    CL-USER 12 > (major-semiaxis e)
    1.4142135

    CL-USER 13 > (* * *)
    1.9999999
    

Úkoly mi nemusíte posílat, jedná se pouze o úlohy k procvičení.