Silverlight数学引擎(16)——图形工厂
<div id="cnblogs_post_body">在此之前呢我们实现了尺规作图的所有图形元素,这就好比有了各种原材料,而且在上一节实现了数据保存和读取,就好比我们的图形产品能够进行储存和流通了;这一节我们就以工厂为概念来介绍我们复合图形的创建,就好比用原材料生产各种配件,然后用各种配件再组装成各种产品,也来过过老板瘾!管理工厂可不是那么简单的,特别是管人,特别是管90后,哎&hellip;&hellip;,好在我们实现了全机械化操作,所有的生产活动都有计算机完成,呵呵。 首先来看看生产车间如何布局,因为我们工厂刚起步,业务不能太复杂,我们就选择几种主打产品吧,有:
1. 线 2. 中垂线 3. 中点 4. 圆 5. 三角形外接圆 6. 点
其中点、线、圆属于基础产品,我们已经实现了,为了方便管理,我们把它们全部移到ShapeFactory类中并且进行一下整合。我们再从依赖的角度将以上图形分一下类:
1. 依赖于两个点的有:线、中垂线、中点。
2. 依赖于三个点的有:圆、外接圆。
3. 点的依赖视其类型而定。
其中,1和2比较有规律,我们就分别建立两个相应的车间BaseOnTwoPointsCreator和BaseOnThreePointsCreator;3不好确定我们就保持现有的逻辑不变,来看一下整合后的结构图,是不是比以前清晰多了?:
http://pic002.cnblogs.com/images/2012/470264/2012121410242676.jpg
有了这种分类,工厂的生产就能够有条不紊啦,看看各种产品的制造工艺就知道了:
<div class="cnblogs_code"> //中垂线 public static LineShape DrawPerpendicularBisector(this CoordinateSystem cs, PointShape A, PointShape B) { var O1 = cs.FindCircle(A, A, B); var O2 = cs.FindCircle(B, B, A); var D = cs.DrawIntersectionPoint1(O1, O2); var E = cs.DrawIntersectionPoint2(O1, O2); var DE = cs.FindLine(D, E, true, true); return DE; } //中点 public static PointShape DrawMidPoint(this CoordinateSystem cs, PointShape A, PointShape B) { var AB = cs.FindLine(A, B, true, true); var PAB = cs.DrawPerpendicularBisector(A, B); var MAB = cs.DrawIntersectionPoint(AB, PAB); return MAB; } //外接圆 public static CircleShape DrawCircumscribedCircle(this CoordinateSystem cs, PointShape A, PointShape B, PointShape C) { var PAB = cs.DrawPerpendicularBisector(A, B); var PBC = cs.DrawPerpendicularBisector(B, C); var O = cs.DrawIntersectionPoint(PAB, PBC); //中垂线交点(外接圆圆心) var circleABC = cs.FindCircle(O, O, A, true, false); //三角形ABC外接圆 return circleABC; }
页:
[1]