网页版几何画板开发笔记(五) 常用数学推导一

一元二次方程:
 ax^2 + bx + c = 0
解为(推导过程略):
  x = x=[-b±√(b²-4ac)]/2a

二元一次方程组:
  A1*x + B1*y + C1 = 0   ---- (1)
  A2*x + B2*y + C2 = 0   ---- (2)
解:
  (1)*A2 :  A1*A2*x + A2*B1*y + A2*C1 = 0
  (2)*A1 :  A1*A2*x + A1*B2*y + A1*C2 = 0
  相减:     0 + (A2*B1 - A1*B2)*y + (A2*C1 - A1*C2) = 0
  从而 y = (A1*C2 - A2*C1) / (A2*B1 - A1*B2)
  有解条件: (A2*B1 - A1*B2) <> 0
 
同样:
  (2)*B1 : A2*B1*x + B1*B2*y + B1*C2 = 0
  (1)*B2 : A1*B2*x + B1*B2*y + B2*C1 = 0
  相减:    (A2*B1-A1*B2)*x + 0 + (B1*C2 - B2*C1) = 0
  从而 x = (B2*C1 - B1*C2) / (A2*B1 - A1*B2)
  合并 y = (A1*C2 - A2*C1) / (A2*B1 - A1*B2)
  有解条件: (A2*B1 - A1*B2) <> 0
 
 
1. 已知向量 v1,v2, 求其平行条件, 可记为 v1∥v2.
设向量v1=(x1, y1), v2=(x2, y2), 其平行条件即为斜率相同, 即:
  y1/x1 = y2/x2,
也即: x1*y2 = x2*y1
也即: x1*y2 - x2*y1 = 0
相当于两个向量的叉乘(cross product). http://baike.baidu.com/view/452810.htm

2. 已知向量 v1, 求其按照坐标系正向旋转 +90°, -90°的向量.
设向量 v1=(x1, y1), 表示为复数形式为 v1 = x1 + i*y1,
旋转 +90° 相当于乘以单位复数 i, 旋转 -90° 相当于乘以单位复数 -i,
则旋转 +90° 的向量 v2 = v1*i = (x1 + i*y1) * i = -y1 + i*x1
  表示为向量为 (-y1, x1)
则旋转 -90° 的向量 v3 = v1*(-i) = (x1 + i*y1) * (-i) = y1 - i*x1
  表示为向量为 (y1, -x1).

3. 已知向量 v1,v2, 求其垂直的条件, 可记为 v1⊥v2.
设向量 v1=(x1, y1), v2=(x2, y2), 将 v2 旋转 +90°, 如果与 v1 平行
则表示 v1垂直于v2.
其中 v2 旋转 +90° 后 v2' = (-y2, x2), 其与 v1 平行的条件为:
  y1/x1=x2/-y2
也即: y1*(-y2)=x1*x2
也即: x1*x2 + y1*y2 = 0
相当于两个向量的点乘(dot product). http://baike.baidu.com/view/452796.htm

4. 已知点 p1, p2 求从 p1->p2 的向量和从 p2->p1 的向量.
设点 p1 坐标为 (x1, y1), p2 坐标为 (x2, y2),
则向量 p1->p2 为 (x2-x1, y2-y1)
则向量 p2->p1 为 (x1-x2, y1-y2)

5. 已知点 p1, p2, p3, p4, 求 p1p2∥p3p4 的条件, 求 p1p2⊥p3p4 的条件.
根据 4, p1p2 构成的向量 v1 为 (x2-x1, y2-y1)
  p3p4 构成的向量 v2 为 (x4-x3, y4-y3)
根据 1, 两向量平行的条件为:
  (x2-x1)*(y4-y3) - (x4-x3)*(y2-y1) = 0
根据 3, 两向量垂直的条件为:
  (x2-x1)*(x4-x3) + (y2-y1)*(y4-y3) = 0

6. 已知点 p1, p2,
  1) 求其中点 ;
  2) 求 p1->p2 方向延长线上点 p3, 使得 p1p2=p2p3
设点 p1 坐标为 (x1, y1), p2 坐标为 (x2, y2),
  则中点为 (p1+p2)/2, 也即 ((x1+x2)/2, (y1+y2)/2)

延长线上 p3, 也即 p3=p2+(p2-p1)=2*p2-p1, 也即
  (2*x2-x1, 2*y2-y1)

7. 已知点 p1, p2, 求过这两点的线的方程.
设点 p1 为 (x1,y1), p2 为 (x2,y2),
在程序中一般使用两点式, 一般式, 参数式三种, 分别如下:
两点式: (y-y1)/(x-x1) = (y2-y1)/(x2-x1)
参数式: p = (p2-p1)*t + p1, 也即:
  x = (x2 - x1)*t + x1
  y = (y2 - y1)*t + y1
一般式: 将两点式展开, 化简如下:
  (y-y1)*(x2-x1) = (y2-y1)(x-x1)  ---- (1)
  (y2-y1)*x -(y2-y1)*x1 = (x2-x1)*y - (x2-x1)*y1
  (y2-y1)*x - (x2-x1)*y +(x2-x1)*y1 - x1*(y2-y1) = 0
  (y2-y1)*x + (x1-x2)*y + (x2*y1 - x1*y2) = 0  ----- (2)
对照 Ax + By + C = 0 的一般式, 有:
  A = (y2-y1)
  B = (x1-x2)
  C = (x2*y1 - x1*y2)

在参数式中, 参数 t 的几何意义是 pp1/p2p1, 用于表示区间非常有效,
例如表示线段, 射线, 直线就是用的 t 的区间表示.
 

 
8. 已知点 p1, p2 构成线 l1, 点 p3 是线外一点, 求点 p3 到 l1 的垂足.

今设 p1 坐标 (x1,y1), p2 坐标 (x2,y2), p3 坐标 (x3,y3), 垂足为 p4.
设用参数式表示 p1,p2 的线, 即:
  p = (p2-p1)*t + p1
为简化, 令:
  dx = x2-x1 = -B
  dy = y2-y1 = A
设垂足 p4 处 坐标为 (xt, yt), 对应为 t. 则:
  xt = (x2-x1)*t + x1 = dx*t + x1   ---- (1)
  yt = (y2-y1)*t + y1 = dy*t + y1   ---- (2)
点 p3p4 构成的线与 p1p2 垂直, 因此满足:
  (x3-xt)*(x2-x1) + (y3-yt)*(y2-y1) = 0    ---- (3)
即 (x3-xt)*dx + (y3-yt)*dy = 0
将 xt,yt 的等式 (1)(2) 代入, 得到:
  (x3 - dx*t - x1)*dx + (y3 - dy*t - y1)*dy = 0
  -dx*dx*t - dy*dy*t + dx*(x3-x1) + dy*(y3-y1) = 0
  dx*(x3-x1) + dy*(y3-y1) = (dx*dx + dy*dy)*t   ---- (4)
为简化令 dx*dx + dy*dy = d2 (p1p2距离的平方)
  令 dx*(x3-x1) + dy*(y3-y1) = m 

从而 t = m/d2  ---- (5)
   = [dx*(x3-x1) + dy*(y3-y1)]/(dx*dx + dy*dy)
将 t 代入 (1),(2) 可算出 xt,yt:
  xt = dx*t + x1
  yt = dy*t + y1

xt 分母部分:  dx*dx + dy*dy
xt 分子部分:  dx*[dx*(x3-x1) + dy*(y3-y1)] + x1*(dx*dx + dy*dy)
   = dx*dx*(x3-x1) + dx*dy*(y3-y1) + dx*dx*x1 + dy*dy*x1
   = dx*dx*x3 + dx*dy*(y3-y1) + dy*dy*x1
yt 分母部分:  dx*dx + dy*dy
yt 分子部分:  dy*[dx*(x3-x1) + dy*(y3-y1)] + y1*(dx*dx + dy*dy)
   = dx*dy*(x3-x1) + dy*dy*(y3-y1) + dx*dx*y1 + dy*dy*y1
   = dx*dx*y1 + dx*dy*(x3-x1) + dy*dy*y3

  
网页上 http://hi.baidu.com/sofiner/item/3cac1a972503e79c581461af 结果为:
 xt = (B*B*x3-A*B*y3-A*C)/(A*A+B*B)
 yt = (-A*B*x3-A*A*y3-B*C)/(A*A+B*B)

将 A=(y2-y1)=dy,B=(x1-x2)=-dx,C=(x2*y1-x1*y2) 代入检查:
 xt 分子 =  dx*dx*x3 + dx*dy*y3 - dy*(x2*y1-x1*y2)
   = ... 数步代入后得到 dx*dx*x3 + dx*dy*(y3-y1) + dy*dy*x1

进一步推导可得到 p3p4 的距离(略):
  d = |A*x3 + B*y3 + C|/ sqrt(A*A + B*B)

这里用参数方法求垂足参数 t, 坐标 xt,yt, 以及距离 d, 是因为在
某些应用中, 还需检查垂足是否在线段上, 那么根据 t 的值, 可以容易做到,
而如果直接用公式得到的, 是无法得到这个参数 t 的(当然可以反过来算出来).


9. 已知点 p1,p2,p3, 构成∠p1p2p3, 求此角平分线与线p1p3的交点 p0 的位置,
这个点我们简称为角平分点.
今角平分线点 p0 在线段 p1p3上面, 满足
  p0 = (p3-p1)*t + p1   (点的参数式表示)
则根据 t 的意义, 其表示 p0p1/p3p1 的比值, 则
  p0p1/p3p0 = t/(1-t)
设 p1p2 长度为 a, p2p3 长度为 b, 则根据角平分线比例定理:
  p1p2/p2p3 = p0p1/p3p0
也即 a/b = t/(1-t)
求解: t = a/(a+b)
带入 t 到参数式中, 得到角平分线点的坐标.

10. 已知点 p1,p2, 求线段 p1p2 的垂直平分线方程.
设坐标 p1(x1, y1), p2(x2, y2), 则 p1p2 的中点m为 ((x1+x2)/2, (y1+y2)/2)
垂直于 p1p2 的向量v为 p1p2*i = (x2-x1, y2-y1)*i = (y1-y2, x2-x1)

求出 p3=m+v, 求出 p4=m-v, 以这两点连线(代入两点式或参数式) 即可得到
垂直平分线方程.

11. 已知三点 p1,p2,p3 求外心点 O 坐标.
在网上可以找到有很复杂的公式可以得到此坐标, 但是太复杂, 不易编程不易
验证, 我们用这里的简单办法.

首先用 10 的方法得到 p1p2 的垂直平分线方程 (1)
再得到 p2p3 的垂直平分线方程 (2), 它们构成二元一次方程组,
用二元一次方程组求解公式代入即可求得交点, 该交点即为外心坐标.

求外心坐标主要用于给定三点, 做过三点的圆, 圆心即为此三点的外心.

你可能感兴趣的:(网页版几何画板开发笔记(五) 常用数学推导一)