【问题标题】:A dynamic array of a class, inside another separate class?一个类的动态数组,在另一个单独的类中?
【发布时间】:2010-05-12 11:06:49
【问题描述】:

我正在开发一个机器人定位模拟器,并创建了一个名为“landmark”的类。

最终结果将是一个始终居中并始终面向屏幕顶部的机器人。当它转动时,鸟瞰图将围绕机器人旋转。为了做到这一点,我假设我可以旋转一个类并且让里面的所有元素也旋转。

因此,地标类具有 x、y、标签和半径属性。这是假设模拟森林中的树木位置。

为了测试一切,我需要“森林数据”,我编写了一个脚本来在 100m x 100m 的区域内生成 100 棵树。该脚本会自动为 x,y, 半径生成可接受范围内的值。生成的数据存储在一个名为 tempForest 的对象中,大小为 100x3。

理想情况下,我想创建一个名为“landmarks”(复数)的类,其中包含 100 个地标实例。

如何使用随机生成的数据在一个地标实例中实例化 100 个地标实例?

理想情况下,我只需键入 treeBeacons = landmarks();它会随机填充 100 个(用户可定义,在配置文件中设置)实例,其中包含 x、y、半径数据。

我不确定如何在另一个单一的“地标”类中处理“地标”类的动态数组。

有什么想法吗?

【问题讨论】:

    标签: graphics matlab


    【解决方案1】:

    我会创建一个类“地标”,它有一个属性“fixedPositions”、一个属性“viewDirection”和一个从属属性“apparentPositions”。

    如果你输入treeBeacons=landmarks;,你可以让构造函数填写fixedPositions,这是你的树的位置列表。然后将treeBeacons.facing 设置为机器人所面向的任何方向,您可以获得相对于机器人的森林treeBeacons.apparentPositions

    根据您的描述,我认为没有必要让您的树成为对象。然而,如果你的树真的需要单独的对象,你可以让地标的构造函数创建对象而不是坐标,并将它们存储在fixedPositions(或trees)中。我只是建议您不要同时使用landmarkslandmark 作为不同的变量名。至少像我这样的普通人很难区分这两者。

    classdef landmarks
        properties
            fixedPositions %# positions in a fixed coordinate system. [ x, y, radius ]
            facing = 0;%# direction in which the robot is facing
        end
        properties (Dependent)
            apparentPositions
        end
        methods
            function obj = landmarks(numberOfTrees)
                 %# set  obj.fixedPositions here depending on the number of trees. 
            end
            function out = get.apparentPositions(obj)
                %# rotate obj.positions using obj.facing to generate the output
            end
            function plotMap(obj,fixedOrApparent)
                %# plots the map, either using fixed or apparent coordinates (good for testing)
            end
        end
    end
    

    【讨论】:

    • 那么固定位置会是树生成器的 100x3 输出吗?如果航向改变,表观位置会改变吗?我假设我会在明显位置添加一个事件侦听器并在我更改标题时将其关闭?
    • @pinnacler:是的,fixedPositions 是树生成器的输出。由于 visiblePositions 是一个依赖函数,因此每当使用“面向”的最新值请求它时都会重新生成它 - 因此,不需要使用事件。
    猜你喜欢
    • 1970-01-01
    • 2018-02-28
    • 1970-01-01
    • 2015-02-27
    • 2017-03-17
    • 1970-01-01
    • 2014-03-21
    • 1970-01-01
    • 2020-02-06
    相关资源
    最近更新 更多