3.4忽现恶心的计算几何一道......各种莫名其妙的公式同时出没,艰难地解决后胡乱写个总结。
3.4.1 closed fence
给出 fence数量和各个fence的坐标,给出观察者坐标,完成2个任务:
1. 这组数据是否合法(合法的定义:连接相邻的2个fence得到一条边,若任意2条边不交叉,该组数据视为合法)
2. 观察者共能看见多少条边。
首先判定2边是否交叉,用叉积判断,要注意必须判断L1两端点是否在L2同侧,和,L2两端点是否在L1同侧(刚开始稀里糊涂只判断了一次)。
计算可见边要麻烦些,设观察点为O,向angle角度引射线OA,会与某边相交于B,OB最小的边可见。
这里要解决:A向何处引,如何计算OB,如何保证正确性。
最好地办法是把OA引向某端点,再偏转一小角度。具体解法在这里。
下面着重熟悉计算几何中莫名其妙的公式和他们的来历。
1.叉积 C
向量Va,Vb
C=Va X Vb = |Va|.|Vb|.sin<Va,Vb> (1)
性质1: Va X Vb = - Vb X Va(就是利用这个性质判断了2点是否在某边的同一侧)
用坐标表示的话 C=ax * by - bx * ay(2维情况)
|ax ay|
正好为行列式 |bx by|(2)
叉积又叫外积(相对内积来说,内积的意义很明显,向量a在b方向上的投影),因为它产生了一个垂直于原来平面的新的维度。它的几何意义来自(1)的定义,为垂直于a,b展开平面的向量,其算术值为a,b确定的平行四边形面积,又或者说它可以表达一个有向面积,用右手螺旋规则来确定方向(这是定义的么?)
为神马可以写成行列式呢?
行列式A是一种计算规则,代表一个值,而不同于矩阵A仅代表A元素的排列。A可以分解为 I*A ,I单位矩阵I的行列式。其意义就明显了,A表示一个伸缩因子,将I表达的正方形,伸缩变换为一个平行四边形。
所以到这里就发现,叉积和行列式原来是有奸情的。
补充:
当a,b的z方向分量不为0时,会发现C的各个方向分量都是一个2维行列式,也就是说3维行列式可以展开成2维行列式,这个可以用物理意义来解释,C为力矩,a,b为产生力矩的F,F可以分解,每个分量产生一个2维行列式。(大概就这样吧,虽然很不严谨)
2.求2直线AB,CD交点。
Ax+i(Bx-Ax) =Cx+j(Dx-Cx)
Ay+i(By-Ay) =Cy+j(Dy-Cy)
初见这公式云里雾里,不明白i,j是神马意义。
其实就是相似比!
好吧,其实这些公式,上学时问过老师,都以不考为由拒绝解答......估计他们也不知道这些公式背后的意义。
在此鄙视从初中到高中教过我的老师,装逼辛苦了。
关于行列式的资料来自《图解线性代数》(任广千胡翠芳编著)
本文使用Blog_Backup未注册版本导出,请到soft.pt42.com注册。