Прежде всего, вам нужно убедиться, что точки не коллинеарны. т.е. не лежат на одной линии. Для этого вам нужно найти направляющие косинусы линий, образованных тремя точками, и, если они имеют одинаковые направляющие косинусы, остановитесь, вы не сможете выбрать из него окружность.
Для направления косинуса, пожалуйста, проверьте эту статью в Википедии.
(Способ нахождения координатной геометрии и геометрии - на основе теоремы о том, что перпендикулярная линия от центра окружности делит хорду на части)
Найти уравнение плоскости.
Это уравнение должно приводить к виду
и направление косинусов (линии, перпендикулярной плоскости, определяет плоскость), поэтому направление косинусов линии, перпендикулярной этой линии, составляет
, данное этой ссылкой уравнений - 8,9,10 (за исключением замены на l
, m
, n
).
Найти уравнение линий (все три) в 3-й
(x-x1)/l=(y-y1)/m=(z-z1)/n
(по направлению косинусов) или
(x-x1)/(x2-x1)=(y-y1)/(y2-y1)=(z-z1)/(z2-z1)
Теперь нам нужно найти уравнение прямой
а) это перпендикуляр к линии, из 2 (пусть l1, m1, n1
- направляющие косинусы этой линии)
b) должен содержаться на месте от 1 (пусть l2, m2, n2
- направляющие косинусы этой линии, перпендикулярной плоскости)
Найдите и решите (хотя бы две строки) из 3
, убедитесь, что вы сможете найти центр круга.
Как узнать уравнение ??? когда мы находим центр окружности, мы получим наши точки (т. е. это середина двух точек), и для а) у нас будет
l1*l+m1*m+n1*n = 0
и l2*l+m2*m+n2*n = 0
, где l, m, n - направляющие косинусы нашей линии, теперь, решая это два уравнения, мы можем получить l
, m
interms от n
. И мы используем это выясненное (x1,y1,z1)
и значение l, m, 1
, и мы получим уравнение.
Другой процесс заключается в решении уравнения, приведенного в этом уравнении
https://stackoverflow.com/questions/5725871/solving-the-multiple-math-equations
Какой самый смертоносный путь.
Другой метод использует преимущество компьютера (путем итерации) - как я его называю (но для этого вам нужно знать диапазон координат, и он потребляет много памяти)
это так (Вы можете сделать это более точно, увеличивая на 1/10), но, конечно, плохой путь.
for(i=minXrange, i>=maxXrange; i++){
for(j=minYrange, j>=maxYrange; j++){
for(i=minZrange, i>=maxZrange; k++){
if(((x1-i)^2 + (y1-j)^2 + (z1-k)^2) == (x2-i)^2 + (y2-j)^2 + (z2-k)^2) == for z)){
return [i, j, k];
}
}
}
}