c# - 如何更改 ILNumerics 绘图标记类型?

标签 c# ilnumerics

我在 3D 场景中有一组随机生成的点,在运行时我想将点标记的类型更改为例如三角形,如图所示:

enter image description here

这可能吗?我怎样才能做到这一点?我还需要为某些点更改颜色。

场景初始化代码如下:

ILArray<float> points = ILMath.tosingle(ILMath.randn(3, 1000));
var scene = new ILScene 
{
    new ILPlotCube(twoDMode: false) 
    {
        new ILPoints 
        {
            Positions = points,
            Color = null,
            Size = 2
        }
    }
};

最佳答案

标记 (ILMarker) 和“点”(ILPoints) 是截然不同的野兽。标记的可配置性要灵活得多,大多数看起来更好,渲染成本也更高。它们通常由边框(线形)和填充区域(三角形)组成,并带有许多预定义的外观。

另一方面,ILPoints 的设计快速而简单。在不降低绘图性能的情况下,可以轻松创建数百万个点。不要用标记尝试这个!但这些点就是它们的本质:实心圆圈。是它。没有边界,没有不同的形状。

但是,如果您想尝试一下 - 即使是您问题中的 1000 分 - 您也可以这样做。只需使用 ILLinePlot 并为其配置标记即可。您可以将线条颜色设置为 Color.Empty 以使标记单独显示。

new ILLinePlot(points, lineColor: Color.Empty, markerStyle: MarkerStyle.TriangleDown)

为了为单个点标记获得单独的颜色,您可以将标记(点)拆分为一组单独的点。使用上述方案为每组点创建一个 ILLinePlot。

处理“动态”的问题部分也很简单:您可以在运行时更改标记的类型以及任何其他属性。这是一个简单的示例,通过单击场景中的任意位置来切换红色三角形标记和白色矩形标记之间的标记:

ilPanel1.Scene.MouseClick += (_s, _a) => {
    if (_a.DirectionUp) return; 
    var lp = ilPanel1.Scene.First<ILLinePlot>();
    if (lp != null) {
        if (lp.Marker.Style == MarkerStyle.TriangleDown) {
            lp.Marker.Style = MarkerStyle.Rectangle;
            lp.Marker.Fill.Color = Color.White;
        } else {
            lp.Marker.Style = MarkerStyle.TriangleDown;
            lp.Marker.Fill.Color = Color.Red; 
        }
        lp.Configure();
        ilPanel1.Refresh(); 
    }
}; 

关于c# - 如何更改 ILNumerics 绘图标记类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27091592/

相关文章:

c# - 用于验证以逗号或破折号分隔的数字的正则表达式

c# - 是否有 ExecuteWhenThisThreadIsIdle 方法?

c# - TargetFramework 与 TargetFrameworks(复数)

arrays - ILMath 函数在给定开始、结束和步长的情况下排列值?

c# - ILSurface 绘图参数

c# - 以 OO 方式组合对象属性

c# - 如何在 C# 中使用 ILNumerics ILMath 计算矩阵的逆?

c# - ILNumerics轴配置

branding - 由 ILNumerics 提供支持

c# - SerialPort.GetPortNames 多次返回同一个端口