地月银光 发表于 2013-1-2 23:18:57

Silverlight数学引擎(7)——尺规作图之交点1

<div id="cnblogs_post_body">前面总结了尺规作图的三大元素(点、线、圆),而且得出其结论——所有图形也最终是依赖于一些自由点(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]
查看完整版本: Silverlight数学引擎(7)——尺规作图之交点1