【问题标题】:Get points on arc with center, start and end points given在给定中心、起点和终点的弧上获取点
【发布时间】:2016-05-08 12:55:58
【问题描述】:

我正在尝试找到一个简单的解决方案来获取弧上的一组点。
我的程序使用 c#、wpf 和 telerik 运行。

在我的程序中,我有一张地图,上面有相机的 FOV(视野)。
到目前为止,我有三角形 fov,但客户希望它带有弧线。
我有一个中心点(相机的原点),两个点代表左右 FOV 边界。
点表示为坐标。

A draw of what I wish to accomplish

我的目标是在连接 FOV 限制(左点和右点)的弧顶上收集一组点,然后将其发送给 Telerik 进行绘制。

一些备注:

  1. 我知道telerik可以画弧线,但是很奇怪binding problems
  2. 我看到一些答案(不是很有帮助)说要计算圆方程并从那里继续。如果可能,我希望避免它。

c# 和 Math 类是否有一些可以提供帮助的工具? 我试着自己计算,但它太复杂了,我无法处理。

谢谢, 诺尔。

【问题讨论】:

    标签: c# wpf telerik


    【解决方案1】:

    您可以将Path 控件与包含ArcSegment 的适当PathGeometry 一起使用。

    在下面的示例中,(100,100) 是圆弧的中心点,(50,50)(150,50) 是圆弧的起点和终点。请注意,圆弧是一段椭圆,其中 ArcSegment 的 Size 属性指定椭圆半径。这里是一个半径为50*sqrt(2)的圆。

    <Path Stroke="Black">
        <Path.Data>
            <PathGeometry>
                <PathFigure StartPoint="100,100" IsClosed="True">
                    <LineSegment Point="50,50"/>
                    <ArcSegment Point="150,50" Size="70.7,70.7" SweepDirection="Clockwise"/>
                </PathFigure>
            </PathGeometry>
        </Path.Data>
    </Path>
    

    或更短:

    <Path Stroke="Black" Data="M100,100 L50,50 A70.7,70.7 0 0 1 150,50Z" />
    

    假设你的视图模型有四个描述弧形图形的属性

    public Point Center { get; private set; } = new Point(100, 100);
    public Point Start { get; private set; } = new Point(50, 50);
    public Point End { get; private set; } = new Point(150, 50);
    public Size Size { get; private set; } = new Size(70.7, 70.7);
    

    您可以使用这样的绑定编写 XAML:

    <PathFigure StartPoint="{Binding Center}" IsClosed="True">
        <LineSegment Point="{Binding Start}"/>
        <ArcSegment Point="{Binding End}" Size="{Binding Size}" SweepDirection="Clockwise"/>
    </PathFigure>
    

    你当然也可以在后面的代码中创建这样的几何图形。

    【讨论】:

    • 感谢您的回复。正如我之前提到的,它有奇怪的绑定问题。我需要将点值绑定到它,这是不可能的(第一条评论中的链接)。由于项目布局,代码隐藏选项也不好。我希望我可以避免这种数学计算,但对于我的情况,这是最简单的结果。
    • 我不是在谈论任何 Telerik 组件。 ArcSegment 是 WPF 的一部分,上述 XAML 中的所有属性当然都是可绑定的。请参阅编辑后的答案。
    • 你知道它是否应该在 Telerik 层之上工作吗?这是一个大型项目,到目前为止我还不能真正改变实施。此外,我尝试通过 DataTemplate 使用它。它有什么不同吗?我应该使用其他对象才能使其工作吗?谢谢
    • 它应该可以很好地协同工作,例如在 Telerik 控件的 DataTemplate 中。
    猜你喜欢
    • 2015-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多