Сейчас в самом первом приближении опишу, что должно получиться.
На экране окно с кнопками и выпадающими меню.
В окне нарисован полупрозрачный шар. Это "эллиптическое пространство". Диаметрально противоположные точки сферы отождествлены -- вылетая из шара наружу, мы тут же влетаем в него с противоположной стороны, перевернувшись вверх ногами.
Плоскости изображаются кусками сфер (находящимися внутри шара), которые пересекают поверхность шара по большим окружностям ("экваторам").
Прямые изображаются кусками окружностей (находящимися внутри шара), пересекающими поверхность шара в диаметрально противоположных точках. Модель конформная, углы в ней настоящие (как бы равноугольная карта эллиптического пространства).
Поскольку эллиптическое пространство устроено как проективное, плоскости (куски сфер) можно задавать четвёрками однородных координат. Вот такой код у меня написан, надо подставить произвольные (a,b,c,d) и из сферы единичного радиуса он делает какую-нибудь сферу, пересекающую её по большой окружности:
var xx = a * x + c * z - d * y;
var yy = a * y + d * x - b * z;
var zz = a * z + b * y - c * x;
var tt = Math.sqrt(a * a + b * b + c * c + d * d) + b * x + c * y + d * z;
x = xx / tt;
y = yy / tt;
z = zz / tt;
Прямые буду задавать координатами Плюккера. Все координаты будут задаваться не приближённо, а точно, способ описан здесь
topic116649.html (там также есть красивые картинки)
Математическая часть в голове готова, рисовальная в первом приближении. Труднее придумать интерфейс. Пользователь должен иметь возможность:
1) вращать шар мышью;
2) ставить точку внутри шара (в любом месте);
3) ставить точку на любой плоскости (куске сферы) и двигать её по ней с помощью мыши. Видимо, для этого надо развернуть этот кусок сферы мордой к зрителю;
4) выделять объекты (плоскости, прямые, точки), наводя на них курсор.
Дальше будут кнопки с инструментами, типа "провести прямую через две выбранные точки".