ILNumerics 在特定位置绘制平面

2023-12-28

我目前正在使用 ILNumerics API,并开始在立方体中绘制几个点。 然后我通过这些点计算了一个回归平面。 现在我想在相同的场景图中绘制平面,但大小仅与点云相同。

我得到了平面的参数(a,b,c):f(x,y) = a*x + b*y + c; 我知道只有 z 对于绘制平面很有趣,但我不知道如何将正确的坐标传递到场景,以便平面大小与点的最大和最小面积大致相同。

你们能给我一个绘制平面的简单示例以及如何正确设置该平面的边界的一些建议吗?

这是我到目前为止得到的:

        private void ilPanel1_Load(object sender, EventArgs e)
    {
           // get the X and Y bounds and calculate Z with parameters

           // plot it!
            var scene = new ILScene {
              new ILPlotCube(twoDMode: false) {
                new ILSurface( ??? ) {
                }
              }
            };

           // view angle etc
            scene.First<ILPlotCube>().Rotation = Matrix4.Rotation(
            new Vector3(1f, 0.23f, 1), 0.7f);

        ilPanel1.Scene = scene; 
    }

我希望有人能帮助我... 提前致谢 !!!


您可以采用plotcube.Plots 组的Limits 并从中导出边界框的坐标。这将为您提供平面的最小和最大 x 和 y 坐标。使用它们通过评估平面方程来获得相应的 z 值。

获得平面的 x、y 和 z 后,将它们与 ILSurface 一起使用来绘制平面。

如果您需要更多帮助,我可以尝试添加一个示例。

@Edit:下面的示例通过 3 个任意点绘制一个平面。平面方向和位置是通过平面函数 zEval 计算的。它的系数 a、b、c 是根据 3 个(具体)点计算的。您必须在这里计算自己的方程系数。

平面是用曲面来实现的。人们不妨采用“P”中计算出的 4 个坐标,并使用 ILTriangleFan 和 ILLineStrip 来创建平面和边界。但表面已经带有填充和线框,因此我们将此作为快速解决方案。

private void ilPanel1_Load(object sender, EventArgs e) {
    // 3 arbitrary points 
    float[,] A = new float[3, 3] { 
        { 1.0f, 2.0f, 3.0f }, 
        { 2.0f, 2.0f, 4.0f }, 
        { 2.0f, -2.0f, 2.0f } 
    };
    // construct a new plotcube and plot the points
    var scene = new ILScene {
        new ILPlotCube(twoDMode: false) {
            new ILPoints {
                Positions = A,
                Size = 4,
            }
        }
    };
    // Plane equation: this is derived from the concrete example points. In your 
    // real world app you will have to adopt the weights a,b and c to your points. 
    Func<float, float, float> zEval = (x, y) => {
        float a = 1, b = 0.5f, c = 1;
        return a * x + b * y + c; 
    }; 
    // find bounding box of the plot contents 
    scene.Configure(); 
    var limits = scene.First<ILPlotCube>().Plots.Limits; 

    // Construct the surface / plane to draw
    // The 'plane' will be a surface constructed from a 2x2 mesh only. 
    // The x/y coordinates of the corners / grid points of the surface are taken from 
    // the limits of the plots /points. The corresponding Z coordinates are computed 
    // by the zEval function. So we give the ILSurface constructor not only Z coordinates 
    // as 2x2 matrix - but an Z,X,Y Array of size 2x2x3
    ILArray<float> P = ILMath.zeros<float>(2, 2, 3);
    Vector3 min = limits.Min, max = limits.Max; 
    P[":;:;1"] = new float[,] { { min.X, min.X }, { max.X, max.X } };
    P[":;:;2"] = new float[,] { { max.Y, min.Y }, { max.Y, min.Y } };
    P[":;:;0"] = new float[,] { 
        { zEval(min.X, max.Y) , zEval(min.X, min.Y) }, 
        { zEval(max.X, max.Y) , zEval(max.X, min.Y) }, 
    };
    // create the surface, make it semitransparent and modify the colormap
    scene.First<ILPlotCube>().Add(new ILSurface(P) {
        Alpha = 0.6f, 
        Colormap = Colormaps.Prism
    }); 
    // give the scene to the panel
    ilPanel1.Scene = scene;
}

这将创建一个与此类似的图像:

@Edit2:您问,如何在添加表面时禁用绘图立方体的自动缩放:

// before adding the surface: 
var plotCube = scene.First<ILPlotCube>(); 
plotCube.AutoScaleOnAdd = false; 

或者,您可以手动设置多维数据集的限制:

plotCube.Limits.Set(min,max); 

您可能还想禁用一些鼠标交互,因为它们将允许用户以类似(不需要的?)方式重新缩放立方体:

plotCube.AllowZoom = false;    // disables the mouse wheel zoom
plotCube.MouseDoubleClick += (_,arg) => {
        arg.Cancel = true;     // disable the double click - resetting for the plot cube
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ILNumerics 在特定位置绘制平面 的相关文章

随机推荐

  • DisplayObject 的可见属性

    例如 我有一个影片剪辑的层次结构 mc1 是 mc 的子级 mc2 是 mc1 的子级 结果当我设置时 mc1 visible false mc2 visible 保持不变 这应该发生吗 有没有测试 mc2 可见性的快捷方式 可以玩的代码
  • vagrant 连接虚拟机失败

    我正在运行 vagrant up 命令来连接到虚拟机 在运行此命令时出现下面提到的错误 我尝试了几个步骤以在 GUI 模式打开的情况下运行它 但是 GUI 模式 本身并没有打开任何东西 在单独的命令提示符中运行此命令时 它会自行打开和关闭
  • Xamarin 表单从文本文件读取结果为空

    我的项目文件资源管理器中有 data txt 文件 我想从这个文本文件中读取数据 但每次尝试时 结果都是空 程序崩溃 我写的代码是 public MapPage var assembly typeof MapPage GetTypeInfo
  • 通过循环生成[0, 1001]中不重复随机数的随机数

    我需要在plpgsql中生成一个不重复的随机数的随机数 非重复数应在 1 1001 范围内 但是 该代码生成的数字超过 1001 directed2number trunc Random 7 1 counter directed2numbe
  • 语法错误或访问冲突:1055 group by 中的表达式 #17

    我尝试使用 laravel 5 3 中的组进行查询 我发现 SQLSTATE 42000 语法错误或访问冲突 1055 SELECT 列表的表达式 17 不在 GROUP BY 子句中 并且包含非聚合列 testtravel country
  • 在哪里可以找到有关转义字符(例如“\”)的文档

    我想更好地了解 R 中的转义字符序列 我尝试过搜索类似的内容 但是 它逃脱了自身并且 我想避免这种行为cat 例如 cat Versus cat 您正在寻找的帮助页面是 Quotes 大写Q 字符串文字语法也有描述 恕我直言 不太清楚 ht
  • 在 Python/Numpy/Pandas 中查找连续值块的开始和结束

    我想在 numpy 数组或最好是 pandas DataFrame 中找到相同值块的开始和停止索引 沿着 2D 数组的列的块 以及沿着 n 维数组的最快变化的索引 我只在单个维度上查找块 并且不想在不同的行上聚合 nan 从这个问题开始 在
  • iOS 9 中的 Spotlight 扩展

    我已经下载了 Xcode 7 beta 并在那里发现了一种新型扩展 2015 年 WWDC 上对此只字未提 它被称为聚光灯延伸 When 聚光灯扩展在 iOS 9 中被称为以及它的用途是什么 From iOS 9 0 https devel
  • React Native 首次加载时图像闪烁

    我正在尝试构建一个带有动画按钮的 ReactNative 应用程序 问题是 该动画在应用程序第一次启动后无法正常工作 有一些白色的闪烁 但在动画第一次出现错误后 一切都按预期进行 我已经尝试过多种方式预加载图像 但没有成功 这是我的最小工作
  • 无法安装适用于 AMD 处理器的 Android 仿真器管理程序驱动程序(安装程序)

    如上所述通过 GUI 禁用 HyperV Disable WindowsOptionalFeature Online FeatureName Microsoft Hyper V 然后通过上面的 powershell 进行确认 然而 当运行
  • 使用 scipy/numpy 在 Python 中解析字母数字 CSV 的最终方法

    我一直在尝试找到一种良好且灵活的方法来在 Python 中解析 CSV 文件 但似乎没有一个标准选项符合要求 我很想自己写一个 但我认为 numpy scipy 和 csv 模块中存在的某种组合可以满足我的需要 所以我不想重新发明轮子 我想
  • 在 .js 文件中包含 .js 文件 [重复]

    这个问题在这里已经有答案了 我想知道是否可以包括 js文件在另一个文件中 js file 我想要这样做的原因是为了将客户端包含的内容保持在最低限度 我有一些 js已经编写了客户端所需功能的文件 客户将有一个 html 文件 他 她用 js文
  • 如何获取路径相关类型的类标签

    我有一个抽象的路径相关类型 我需要对其进行 ClassTag 有没有比手动提取每个具体派生类的隐式更好的方法 trait Foo type A ClassTag Need the ClassTag of A later val ctA Cl
  • 使用 C++ 中的 scanLine() 方法存储 QImage 的所有像素

    我正在尝试使用修改图像Qt与scanLine http doc qt io qt 4 8 qimage html scanLine方法 此方法返回指向给定行数据的指针 我创立了如何读取行here https stackoverflow co
  • 动态更改日志文件的文件路径.NET Core + NLog

    在我的 NET Core 应用程序中 我使用一些环境 并且我想为每个环境使用不同的路径来记录文件 例如 Development c logs Staging d apps logs 对于每个环境我都有配置部分appsettings env
  • Windows 7:超出 C++ std::this_thread::sleep_for

    我们的代码是用 C 11 VS2012 Win 7 64bit 编写的 C 库提供了sleep for我们使用的函数 我们观察到 C sleep for有时会出现较大的超调 换句话说 我们请求睡眠 15 毫秒 但睡眠结果是例如 15 毫秒
  • YouTube API:如何获取 liveChatId?

    文档说 liveChatId 参数指定将返回其消息的聊天 ID 与广播关联的实时聊天 ID 在 liveBroadcast 资源的 snippet liveChatId 属性中返回 但是 当使用 API Explorer 和 youtube
  • 从特定列 scala Spark 数据帧获取最小值和最大值

    我想从我的数据框中访问特定列的最小值和最大值 但我没有列的标题 只有它的编号 所以我应该使用 scala 吗 也许是这样的 val q nextInt ncol we pick a random value for a column num
  • Javascript:如何正确扩展类

    在互联网上搜索时 我总是遇到这种 Javascript 类扩展方法 function extend Child Parent var F function F prototype Parent prototype Child prototy
  • ILNumerics 在特定位置绘制平面

    我目前正在使用 ILNumerics API 并开始在立方体中绘制几个点 然后我通过这些点计算了一个回归平面 现在我想在相同的场景图中绘制平面 但大小仅与点云相同 我得到了平面的参数 a b c f x y a x b y c 我知道只有