【发布时间】:2015-01-10 17:57:09
【问题描述】:
我希望通过椭圆而不是线来显示骨架。我有两个坐标为 X 和 Y 的点。 当我想画一个椭圆时,我需要
public abstract void DrawEllipse(
Brush brush,
Pen pen,
Point center,
double radiusX,
double radiusY
)
所以我尝试过使用这段代码,但有一些错误(不知道radiusY):
double centerX = (jointPoints[jointType0].X + jointPoints[jointType1].X) / 2;
double centerY = (jointPoints[jointType0].Y + jointPoints[jointType1].Y) / 2;
double radiusX =Math.Sqrt( (Math.Pow((jointPoints[jointType1].X - jointPoints[jointType0].X), 2)) + (Math.Pow((jointPoints[jointType1].Y - jointPoints[jointType0].Y), 2)));
drawingContext.DrawEllipse(null, drawPen, new Point(centerX, centerY), radiusX, radiusX/5);
谁能帮帮我?
private void DrawBone(IReadOnlyDictionary<JointType, Joint> joints, IDictionary<JointType, Point> jointPoints, JointType jointType0, JointType jointType1, DrawingContext drawingContext, Pen drawingPen,List<JointType> badJoint)
{
Joint joint0 = joints[jointType0];
Joint joint1 = joints[jointType1];
// If we can't find either of these joints, exit
if (joint0.TrackingState == TrackingState.NotTracked ||
joint1.TrackingState == TrackingState.NotTracked)
{
return;
}
// We assume all drawn bones are inferred unless BOTH joints are tracked
Pen drawPen = this.inferredBonePen;
if ((joint0.TrackingState == TrackingState.Tracked) && (joint1.TrackingState == TrackingState.Tracked))
{
drawPen = drawingPen;
}
//If a bone makes parts of an one bad angle respect reference angle
if (badJoint.Contains(jointType0) && badJoint.Contains(jointType0))
drawPen = new Pen(Brushes.Red, 6);
drawingContext.DrawLine(drawPen, jointPoints[jointType0], jointPoints[jointType1]);
【问题讨论】:
-
您收到的 exact 错误消息是什么?见stackoverflow.com/help/mcve 和stackoverflow.com/help/how-to-ask
-
我没有错误,但我没有按照我的意愿显示骨架。椭圆不通过点,我不知道如何设置radiusY。上面我发布了一个屏幕,我认为它更复杂,因为移动骨骼时 x 和 y 会发生变化
-
您可以在点之间制作一条虚拟线,然后在大虚拟线的顶部和底部创建两条旋转 90 度的较小虚拟线(如总线的 15%)。现在只需获取线的旋转(Math.atan2)并绘制一个旋转的椭圆。 i.imgur.com/XybEThO.png
-
哪一行得到轮换?
标签: c# kinect ellipse skeleton-code