绘制任意2个坐标之间2条平行线在AS3的阶段(Draw 2 parallel lines betwe

2019-09-20 17:27发布

我在深化发展的网络应用程序,基本上它的插图/ Flash中的简单的版本。 所以足球教练员可以使方案。
我做了类似于Photoshop不同的工具(行工具,矩形工具,..)。 所有这些工作。

但是现在我需要开发工具, 用户可以绘制双平行线 。 我想能够定义在一个变量的那些2线之间的距离 。 我需要在舞台上绘制任何两点之间2条平行线。 类似于Photoshop / Illustrator中的行工具,但它吸引2线一次。


它应该基本上是这样工作
1)对小鼠向下:
创建一个新的图形对象,并登记在用户点击的X和Y。 开始侦听鼠标移动。

2)上移动鼠标:
清除图形对象,从原来的鼠标位置,以当前鼠标位置绘制双线。 重绘每个鼠标移动。

3)对小鼠起来:
停止监听事件和双行添加到舞台上。


这完美地工作用于绘制单条线,但是我在使用2条平行线的麻烦。 它们平行不留彼此或转动不正常。

Answer 1:

您需要将这种方式绘制点:

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 = DELTAXY2 - 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/



文章来源: Draw 2 parallel lines between any 2 coordinates on the stage in AS3