我在深化发展的网络应用程序,基本上它的插图/ Flash中的简单的版本。 所以足球教练员可以使方案。
我做了类似于Photoshop不同的工具(行工具,矩形工具,..)。 所有这些工作。
但是现在我需要开发工具, 用户可以绘制双平行线 。 我想能够定义在一个变量的那些2线之间的距离 。 我需要在舞台上绘制任何两点之间2条平行线。 类似于Photoshop / Illustrator中的行工具,但它吸引2线一次。
它应该基本上是这样工作
1)对小鼠向下:
创建一个新的图形对象,并登记在用户点击的X和Y。 开始侦听鼠标移动。
2)上移动鼠标:
清除图形对象,从原来的鼠标位置,以当前鼠标位置绘制双线。 重绘每个鼠标移动。
3)对小鼠起来:
停止监听事件和双行添加到舞台上。
这完美地工作用于绘制单条线,但是我在使用2条平行线的麻烦。 它们平行不留彼此或转动不正常。
您需要将这种方式绘制点:
90 degrees (UP from the START point) 90 degrees (UP from the END point)
| |
START- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - END
| |
90 degrees (DOWN from the START point) 90 degrees (DOWN from the END point)
一旦确定这些6个点(2个用于顶线,2为底线鼠标的开始和结束,以及2),可以用一个连接在顶线和底线的一对点一起了lineTo(...)命令来给你这个:
------------------------------------------------------------------------------
START END
------------------------------------------------------------------------------
要知道什么是你的起点和终点形成了目前的角度,您需要点的X和Y值的增量(两个值之间的差异)。
所以X2 - X1 = DELTAX和Y2 - Y1 = DELTAY。
然后,把这些增量在Math.atan2(y:Number, x:Number):Number
。 返回的值是弧度我相信,所以有度的工作,你可以通过180 / Math.PI结果乘以做转换。
这会不会是真的有必要然而,正如我们在弧度恢复计算的其余部分。 这将是对存储在变量上述值(180 / Math.PI)是有用的。
如果我们继续弧度,它给我们的90度转换为弧度是很重要的。
- 90 /弧度为我们提供了许多来自我们的起点和终点,以抵消解决了顶线 。
- -90 /弧度给我们的数量从我们的起点和终点,以抵消解决的底线 。
换一种说法...
这是我快速测试的整体解决方案,我很抱歉,如果它不能正常工作100%:
var startPoint:Point = new Point(10, 0); //Replace by start-mouse location
var endPoint:Point = new Point(20, 0); //Replace by end-mouse location
var mouseAngle:Number = Math.atan2( endPoint.y - startPoint.y, endPoint.x - startPoint.x );
var angle:Number;
var lineHalfGap:Number = 100 * .5; //Replace 100 by your seperation value
var radians:Number = 180 / Math.PI;
angle = 90 / radians + mouseAngle;
var topOffsetX:Number = Math.cos( angle ) * lineHalfGap;
var topOffsetY:Number = Math.sin( angle ) * lineHalfGap;
angle = -90 / radians + mouseAngle;
var bottomOffsetX:Number = Math.cos( angle ) * lineHalfGap;
var bottomOffsetY:Number = Math.sin( angle ) * lineHalfGap;
var topStart:Point = new Point(startPoint.x + topOffsetX, startPoint.y + topOffsetY);
var topEnd:Point = new Point(endPoint.x + topOffsetX, endPoint.y + topOffsetY);
var bottomStart:Point = new Point(startPoint.x + bottomOffsetX, startPoint.y + bottomOffsetY);
var bottomEnd:Point = new Point(endPoint.x + bottomOffsetX, endPoint.y + bottomOffsetY);
trace(topStart, topEnd, bottomStart, bottomEnd);
显然,是你将不得不更换为自己/替代品(如鼠标位置,并为您的行间的间隔值)几个变量,但这应该做的伎俩。
正在运行的例子可以在这里找到:
http://pierrechamberlain.ca/blog/2012/08/math-101-parallel-lines-two-points/