2015-04-22 268 views
0

很抱歉,如果这已被问过,但我无法找到一个有效的响应或响应我能理解绘制在C#中平行线

目前我有画线从联合到联合在代码Kinect的,这形成了骨:

drawingContext.DrawLine(drawPen, jointPoints[jointType0], jointPoints[jointType1]); 

enter image description here

在图片aboe它显示平行线从圈子加入到cirlce,可有人请向我解释或告诉我创建这些线路?

+0

如果问题是关于游戏开发,你可能会得到更好的帮助(http://gamedev.stackexchange.com/) –

+0

不是游戏开发,但我正在开发一个应该跟踪用户关节的程序,但是我很难做简单的事情,如图片显示。例如,我只需要知道如何绘制图片中显示的平行线以及圆圈上方的数字。 – ShatteredPheonix

回答

3

如果您有一条从点p0到点p1的线,并且想要创建平行线/偏移线,则需要使用三角法或矢量数学。

要使用矢量数学做到这一点:

  • 查找行
  • 的方向矢量查找矢量垂直于
  • 使用垂直矢量来抵消p0p1

伪代码:

Vector vLine = (p1 - p0).Normalized(); 
Vector vPerp = new Vector(-vLine.Y, vLine.X); 
Point newp0 = p0 + vPerp * offset distance 
Point newp1 = p1 + vPerp * offset distance 
DrawLine(newp0, newp1); 

反转偏移或取消vPerp以在另一侧获得一条线。你如何做到这一点取决于你有什么可用的。 System.Windows.VectorSystem.Windows.Point应该正常工作,因为您使用的是WPF。

如果您对这里更详细的内容感兴趣,可以使用Google搜索并搜索向量数学或线性代数。

+0

噢,谢谢,当我回到家时,我会尝试这个,并且我大部分都明白,因为我必须使用向量数学来计算关节之间的角度。我唯一的问题是我该如何在圈子上面放一个这样的数字? – ShatteredPheonix

+0

@ShatteredPheonix只需取得关节的位置并补偿一下。伪代码:'DrawText(text,p0 + new Point(0,-10))' – Chris

+0

@ShatteredPheonix稍后你会注意到,如果你想得到完全像这样的图片的结果,你还需要修剪线圈到.. ..! – Chris