【问题标题】:Drawing Parallel Lines in C#在 C# 中绘制平行线
【发布时间】:2015-04-22 19:30:14
【问题描述】:

抱歉,之前有人问过这个问题,但我找不到有效的回复或我能理解的回复

目前我有一个代码可以在 Kinect 中从一个关节到另一个关节画一条线,这形成了骨骼:

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

在上图中,它显示了从圆连接到圆的平行线,有人可以向我解释或告诉我创建这些线吗?

【问题讨论】:

  • 如果是关于游戏开发的问题,你可能会更好help here
  • 不是游戏开发,但我正在开发一个应该跟踪用户关节的程序,但是我在做一些简单的事情时遇到了麻烦,比如图片所示。例如,我只需要知道如何绘制如图所示的平行线以及圆圈上方的数字。

标签: c# xaml graphics kinect drawingcontext


【解决方案1】:

如果您有一条从点 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。

如果您对这里发生的更详细的内容感兴趣,请使用谷歌搜索并搜索矢量数学或线性代数。

【讨论】:

  • 哦,谢谢,我回家后会试试这个,是的,我大部分都明白,因为我必须使用矢量数学来计算关节之间的角度。我唯一的另一个问题是我怎么在圆圈上面放一个这样的数字?
  • @ShatteredPheonix 只需获取关节的位置并稍微偏移它。伪:DrawText( text, p0 + new Point( 0, -10 ) )
  • @ShatteredPheonix 稍后您还会注意到,如果您想获得与该图片完全相同的结果,您还需要将线条的末端修剪成圆圈......!
  • 是的,我想我有一个方法可以解决这个问题,但我需要为我正在做的项目实现这种效果。如果我不能让它工作,我会发布更多问题,这是我第一次使用 wpf 和 Xaml
  • 我设法得到平行线谢谢你,但我在外圈四舍五入的方法不起作用
猜你喜欢
  • 2013-04-06
  • 2021-11-29
  • 2017-01-14
  • 1970-01-01
  • 2018-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-08
相关资源
最近更新 更多