C# 通过point设置一个点的坐标,如何在WPF窗口中显示

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# 通过point设置一个点的坐标,如何在WPF窗口中显示相关的知识,希望对你有一定的参考价值。

1、在C#中,Point是一个结构体,表示二维空间内X轴和Y轴的坐标值。

2、如果需要在WPF中显示点,首先应该定义一个点控件,点控件具有一个Point属性,见附件代码。

3、通过修改点控件的Point属性,可以达到移动点位置的效果,详见附件。


追问

private Point poiNextPoint = new Point();
poiNextPoint.X = 80;
poiNextPoint.Y = 100;
如果是这样的话,我直接指定了点的坐标,能直接通过一句话,将这个点显示在窗口中么?

追答

不行,因为Point是结构体,不是UI类型。

参考技术A 你得用一个控件显示啊. point是一个类不能显示追问

我现在是通过path绘制了一个坐标系,我需要在这个坐标系中显示二维数组中的点?就是需要指定X和Y。这样的话,应该如何实现呢?

追答

我不明白你说的什么 path绘制, 坐标系.
请不要用你个人定义的关键字("坐标系")来同化大家.要用共知的关键字如"二维数组"

追问

我把我的代码发给你看看。1181324794,能加一个好友么?

C# 曲线上的点 获取指定横坐标对应的纵坐标值

获取直线上的点,很容易,那曲线呢?二阶贝塞尔、三阶贝塞尔、多段混合曲线,如何获取指定横坐标对应的纵坐标?

如下图形:

技术图片

 实现方案

曲线上的点集

Geometry提供了一个函数GetFlattenedPathGeometry,可以获取其绘制后显示的多边形。

我们可以通过其Figures -> PathSegment -> Point,

 1     public List<Point> GetPointsOnPath(Geometry geometry)
 2     {
 3         List<Point> points = new List<Point>();
 4         PathGeometry pathGeometry = geometry.GetFlattenedPathGeometry();
 5         foreach (var figure in pathGeometry.Figures)
 6         {
 7             var ordinateOnPathFigureByAbscissa = GetOrdinateOnPathFigureByAbscissa(figure);
 8             points.AddRange(ordinateOnPathFigureByAbscissa);
 9         }
10         return points;
11     }
12     private List<Point> GetOrdinateOnPathFigureByAbscissa(PathFigure figure)
13     {
14         List<Point> outputPoints = new List<Point>();
15         Point current = figure.StartPoint;
16         foreach (PathSegment s in figure.Segments)
17         {
18             PolyLineSegment segment = s as PolyLineSegment;
19             LineSegment line = s as LineSegment;
20             Point[] points;
21             if (segment != null)
22             {
23                 points = segment.Points.ToArray();
24             }
25             else if (line != null)
26             {
27                 points = new[] { line.Point };
28             }
29             else
30             {
31                 throw new InvalidOperationException("尼玛!");
32             }
33             foreach (Point next in points)
34             {
35                 var ellipse = new Ellipse()
36                 {
37                     Width = 6,
38                     Height = 6,
39                     Fill = Brushes.Blue
40                 };
41                 Canvas.SetTop(ellipse, next.Y);
42                 Canvas.SetLeft(ellipse, next.X);
43                 ContentCanvas.Children.Add(ellipse);
44                 current = next;
45             }
46         }
47         return outputPoints;
48     }

最终界面显示,获取的点集是如下布局的:

技术图片

 

曲线上的点

我们发现,拐角越大,获取的点越密集。所以可以看出,角度变化越大,需要的点越密集。

直线通过斜率很容易获取横坐标对应的纵坐标,那么这有如此多点的曲线呢?

我们是不是可以曲线救国,通过相邻的俩个点画直接,从而获取俩点间的点坐标呢?我们来尝试下~

还是原来的代码,传入一个X坐标参数即可。

然后俩点之间,获取X坐标对应的Y坐标:

 1         private bool TryGetOrdinateOnVectorByAbscissa(Point start, Point end, double abscissa, out double ordinate)
 2         {
 3             ordinate = 0.0;
 4             if ((start.X < end.X && abscissa > start.X && abscissa < end.X) ||
 5                 (start.X > end.X && abscissa < start.X && abscissa > end.X))
 6             {
 7                 var xRatio = (abscissa - start.X) / (end.X - start.X);
 8                 var yLength = end.Y - start.Y;
 9                 var y = yLength * xRatio + start.Y;
10                 ordinate = y;
11                 return true;
12             }
13             return false;
14         }

点击窗口,在曲线上,获取点击处X坐标对应的点。效果图如下:

 技术图片

 Github: Demo

以上是关于C# 通过point设置一个点的坐标,如何在WPF窗口中显示的主要内容,如果未能解决你的问题,请参考以下文章

wpf中怎样将image固定在一个给定的点Point上?

C# wpf 使用 polyline 做一个贪吃蛇游戏的小蛇移动吃食部分功能

我是菜鸟中的菜鸟,我不会画三角形,用c# 。。GDI,,,只知道用point定义三个点对象,那么然后呢??嘿嘿

C# 曲线上的点 获取指定横坐标对应的纵坐标值

C# ArcEngine,如何根据已有的一系列点的XY坐标,把这些线在地图上显示出来?请注意是有二三十条线。。。

TextBlock在wpf C#中的图像内的特定坐标中设置