Если вы предполагаете, что a и b являются противоположными углами прямоугольника
a = (xa, ya)
b = (xb, yb)
, то верхняя правая точка прямоугольника равна c1 = (max(xa,xb), max(ya,yb))
, а нижняя левая точка прямоугольника равна c2 = (min(xa,xb), min(ya,yb))
Предполагая, что xa != xb
и ya != yb
(xa, ya) A C1 (max(xa, xb), max(ya, yb))
o----------o
|\ |
| \ |
| \ |
| \ |
| \ |
| \ |
| \ |
| \ |
| \ |
o----------o
(min(xa, xb), min(ya, yb)) C2 B (xb, yb)
Если ваша диагональ идет другим путем (чтобы проверить это, посмотрите, если xa> xb), вам нужно поменять мин на максимум на х
(min(xa, xb), max(ya, yb)) C3 A'
o----------o
| /|
| / |
| / |
| / |
| / |
| / |
| / |
| / |
| / |
o----------o
B' C4 (max(xa, xb), min(ya, yb))
А если вам интересно, то на самом деле весь круг решений лежит на круге:
Чтобы вычислить это, предположим, у нас есть две точки A = (xa, ya)
и B = (xb, yb)
.Тогда центральная точка этого круга будет c = (0.5 (xa + xb), 0.5 (ya + yb))
- просто середина A и B. Радиус круга равен r = sqrt( (xb - xa)^2 + (yb - ya)^2) / 2
- используя теорему Пифагора, чтобы получить длину линии и делить ее пополам.Тогда любая точка на окружности может быть определена как p = c + (rcos(u), rsin (u))
для некоторого угла u
.Есть 2 угла, которые дают вам точки p = A
и p = B
, поэтому эти значения u
не являются хорошими решениями.Вы можете выписать уравнение и решить его для этих двух точек, чтобы получить значения u, которые вы не можете использовать.