В зависимости от того, что вы хотите сделать с объектом - у меня есть другая альтернатива.
Смоделируйте круг как единичный круг в плоскости xy с z = 0.
с масштабированием, переводом и вращением операций, сделанных с ним.
Если вы планируете выполнять много матричных операций над вашими объектами, это может быть правильным способом.
Вы также можете сохранить положение окружности юнита, радиус и нормаль к информации о плоскости как свойства. и есть метод для преобразования между двумя описывающими методами.
Circle() - Default Unit circle at (0,0,0), radius 1, xy plane at z=0
Circle(scale, translate, rotate) - my constructor
Circle(location, radius, normal) - the other proposed constructor