在运行时解决y立方体方程

时间:2011-07-11 06:53:27

标签: c++ algorithm math

我正在使用c ++实时裁剪一个对象。在这里我知道了A点和B点的2个坐标。我想找到与AB线垂直的第3点Z. Z(X3,Y3)。它意味着ABZ角是90.当我使用BZ斜率和BZ距离时,我获得了2个巨大的方程。我简化了它并获得了以下等式。

y3 ( y3 (k1 + y3) + k) = k ;

这里k1,k2,k3是已给出的Constance。但是k1 , k2 , k3并不是彼此相等的。 我想在这里找到y3。请帮帮我。

3 个答案:

答案 0 :(得分:1)

三次方程有an exact solution。这很丑,但你去了。

请记住会出现数字不稳定的情况。如果准确性很重要,则应使用多种方法。

This guy有解决方案代码,Dr. Math有一些解释。

答案 1 :(得分:1)

这听起来过于复杂,至少如果我理解你的话 问题。如果Z上没有其他约束(除了它之外) 在B)垂直于AB的线,然后:

Z.x = B.x - (A.y - B.y);
Z.y = B.y + (A.x - B.x);

解决了这个问题。如果对Z有其他限制,则上述 表达式仍然给出一个点,用B定义该行。 根据约束条件,计算实际Z可能更多或 不那么复杂,但它仍然不应该涉及立方方程。

如果你确实需要采用立方根,当然,最简单的解决方案是使用标准函数cbrt

答案 2 :(得分:1)

一般来说,如果你想解决一个三次方程式

  

x ^ 3 + ax ^ 2 + bx + c = 0

你已经有两个解决方案x1,x2并正在寻找第三个解决方案x3 然后你可以通过观察

来做到这一点
  

x ^ 3 + ax ^ 2 + bx + c =(x-x1)(x-x2)(x-x3),

因此

  

-a = x1 + x2 + x3

  

x3 = -a -x1 -x2

因此,在另外两种解决方案中找到立方体的第三种解决方案是微不足道的。