Здравствуйте, Кирилл Осенков, Вы писали:
DG>>Все операции для эллипса доступны и для круга.
КО>Ну не знаю. А операция "сжать в n раз к большей оси? А как насчет провести прямую через фокусы?
Считаем, что для круга ось, например, всегда вертикальна
class Ellipse
{
virtual Vector BigAxis {get {return (Focus1 - Focus2).Normalize();}}
}
class Circle:
Ellipse
{
override Vector BigAxis {get {return new Vector(0, 1);}}
}
тогда все эти операции продолжают работать.
DG>>Также у круга есть дополнительные операции.
КО>Круг — подтип эллипса — навязывает задание фокусами и эксцентрисситетом (или полуосями, или еще сотней способов — но не центром и радиусом). Если мы хотим эффективно обращаться с окружностями, их просто необходимо задавать центром и радиусом, иначе это будет очень неестественно.
DG>>Я бы даже сказал, что круг поддерживает интерфейс эллипса, а не наследуется от эллипса, т.к. хранить те же два фокуса уже не надо.
КО>Во. Это да.
Но ведь часть реализации тоже можно наследовать.