У меня есть это.
Так что все, что мне нужно, это применить инвертированное преобразование к точкам (minX, minY);(maxX, minY);(maxX, maxY);(maxX, minY);А затем используйте простой эллипс (упомянутый выше) и линейные уравнения, чтобы найти четыре точки пересечения, которые затем должны быть преобразованы в глобальные координаты, умножающиеся для преобразования.
Вот код для одной точки
arcLineIntersection(lineStart, lineEnd, rx2, ry2, out) {
const lineK = (lineEnd.y - lineStart.y) / (lineEnd.x - lineStart.x);
if (Number.isFinite(lineK)) {
const lineB = lineStart.y - lineK * lineStart.x;
const a = lineK * lineK + ry2 / rx2;
const b = 2 * lineK * lineB;
const x = -b / (2 * a);
const y = lineK * x + lineB;
out.set(x, y);
} else {
const x = lineStart.x;
const y = Math.sqrt(ry2 * (1 - x * x / rx2));
out.set(x, y);
}
}
Результат