找到由2个点及其切线交点

时间:2016-08-30 18:51:55

标签: javascript math vector-graphics

example

我有笛卡尔坐标P,P0和P1,如何找到C?

注意C也是三角形的中心点,其中P为顶点,P0和P1为高度。

此代码将在图形渲染器中每秒运行几百次,在已经执行复杂物理的程序中,因此需要快速。我正在用它来计算二次曲线的控制点。如果可能的话,我想避免触发功能和计算角度,并坚持使用纯矢量数学。

纯数学答案很好,即使我在Javascript中编程。请记住,答案越简单越好,因为任何向量操作都会花费时间。

1 个答案:

答案 0 :(得分:2)

方法1:
向量CP0和PP0是垂直的,CP1和PP1是垂直的,所以我们可以为这些向量对的点积写出两个方程组,找到两个未知的CX和CY(中心坐标)

.radiospan {
    font-family: Verdana;
}

.checkspan {
    display: block;
    font-family: Verdana;
}

#newDivCenter span {
  display: inline-block;
}

.block-row {
  display: block;
}
.input-group {
  display: inline-block;
}
.radiodiv {
  display: inline;
}

#newDivCenter {
    background-color: yellow;
    text-align: center;

    max-width:840px;
}

方法2:
P0和P1之间的中点M具有坐标

CP0 = (CX - P0.X, CY - P0.Y)
CP1 = (CX - P1.X, CY - P1.Y)
PP0 = (P.X - P0.X, P.Y - P0.Y)
PP1 = (P.X - P1.X, P.Y - P1.Y)

Dot(CP0, PP0 ) = 0
Dot(CP1, PP1 ) = 0

(CX - P0.X) * (P.X - P0.X) + (CY - P0.Y) * (P.Y - P0.Y) = 0
(CX - P1.X) * (P.X - P1.X) + (CY - P1.Y) * (P.Y - P1.Y) = 0

Theta是角度P0PC

  M.X = (P0.X + P1.X) / 2          ///1
  M.Y = (P0.Y + P1.X) / 2          ///2
  Distance P-M is DM
  DM_Squared = (P.X-M.X)^2 + (P.Y-M.Y)^2     ///3
  L, D distances are from your notation
  L_Squared = (P.X-P0.X)^2 + (P.Y-P0.Y)^2     ///4

公式1..7即可使用