Попробуйте это, я все еще рассчитываю :) улучшение ... Дайте мне знать, если это сработает.
A = (x1,y1,z1)
B = (x2,y2,z2)
C = (x,y,z)
С будет делить линию, соединяющую А и В в соотношении x1/x2
.
Таким образом, по подобию (y, z) будет также разделяться линейное соединение (y1, z1) и (y2, z2) в том же соотношении.
В точке С лежит в Y-Z плоскости
x = 0
от Section Formula
y = (r*y2 + y1)/(r+1)
z = (r*z2 + z1)/(r+1)
where r = |x1|/|x2|
Простой пример:
Пусть A = (1,2,2)
и B = (-2,2,2)
затем C
должны быть четко (0,2,2)
.
x = 0
r = 1/2 = 0.5
y = (0.5*2 + 2)/(0.5+1) = 2
z = (0.5*2 + 2)/(0.5+1) = 2
КОД C#:
public class Point
{
public double x { get; set; }
public double y { get; set; }
public double z { get; set; }
public Point(double X, double Y, double Z)
{
x = X;
y = Y;
z = Z;
}
public override string ToString()
{
return string.Format("({0},{1},{2})",x,y,z);
}
}
public class Program
{
public static void Main()
{
Point a = new Point(-10, 0, 10);
Point b = new Point(10, 0, 0);
Console.WriteLine(GetIntersectionWithYZ(a,b));
}
public static Point GetIntersectionWithYZ(Point A, Point B)
{
double r = - A.x/B.x;
double y = (r * B.y + A.y)/(r + 1);
double z = (r * B.z + A.z)/(r + 1);
return new Point(0, y, z);
}
}
Если вы имеете в виду плоскость, где x = 0, то я бы назвал это плоскостью Y-Z. –
yepp, это плоскость, я имею в виду – clamp
Возможный дубликат [3D Line-Plane Intersection] (http://stackoverflow.com/questions/5666222/3d-line-plane-intersection) – ideasman42