Silverlight数学引擎(7)——尺规作图之交点1
<div id="cnblogs_post_body">前面总结了尺规作图的三大元素(点、线、圆),而且得出其结论&mdash;&mdash;所有图形也最终是依赖于一些自由点(FreePoint)。自由点是没有依赖的,可以在屏幕上随意绘制,因此除了基本的坐标转换(数学坐标系与屏幕坐标系)外没有复杂的数学计算,所以我们也就不讨论了。本节主要讨论线与线交点的坐标计算,本来想把三种交点(线与线,线与圆,圆与圆)放在一节介绍,后来写演示代码的时候发现工程量有点大,所以这一节还是只是介绍下线与线的交点(这叫做小步快跑,是TDD编程的推荐方法,因为步子迈太大容易扯着蛋啦,寡人这两天就觉得有点蛋疼)。线与线的交点必须要有两条线,我们在后台计算坐标需要用到平面解析几何(就是代数与几何的结合体啦),用到的都是初中的数学知识,因此大家不要惊慌。
先来看看直线的方程:
y=ax+b
当我们用两个自由点确定一条直线时,我们把两个自由点A(x1,y1),B(x2,y2)的坐标代入改方程可以求解出a和b的值。为了直观起见,我们定义一个线的类(LogicLine)。(本节定义的类基本上都是为了演示计算和与数学概念相衔接,我们计算是用数学坐标系为参考的)。
<div class="cnblogs_code">//表示直线:y=ax+b public class LogicalLine { public LogicalLine(LogicalPoint p1, LogicalPoint p2) { P1 = p1; P2 = p2; } public LogicalPoint P1 { get; set; } public LogicalPoint P2 { get; set; } //直线(x1,y1)(x2,y2):y=ax+b:a=(y1-y2)/(x1-x2),b=y1-a*x1 private double dy { get { return P2.Y - P1.Y; } } private double dx { get { return P2.X - P1.X; } } public double a { get { return dy / dx; } } public double b { get { return P1.Y - a * P1.X; } } }
页:
[1]