matlab oop“使用孔类数据”进行计算

时间:2017-03-17 16:39:03

标签: matlab oop

首先,抱歉标题不好 - 我是OO编程的新手 - 基本上我想了解Matlab如何使用oop类。

在我提出问题之前,这是我想要做的基本例子:

我有两个房子和一些关于他们的数据,我有了想法,与oop课程一起工作。这是我的.m文件。

classdef building
  properties
  hohe = 0;
  lange = 0;
  breite = 0;
  xabstandsolar = 0;
  yabstandsolar = 0;
end

methods
  function obj = building(hohe, lange, breite, xabstandsolar, yabstandsolar)
    obj.hohe = hohe;
    obj.lange = lange;
    obj.breite = breite;
    obj.xabstandsolar = xabstandsolar;
    obj.yabstandsolar = yabstandsolar;
   end

   function hohenwinkel(h)
     h = h
     d = sqrt(obj.xabstandsolar^2 + yabstandsolar^2);
     gamma_v = atand((obj.hohe - h)/(d));
   end 
  end
end

我填写了一些数据 - 例如

>>H1 = building(10,8,6,14,8)
>>H2 = building(18,8,6,14,0)

现在我想为每个建筑物计算“gamma_v”(作为1x2阵列)。任何想法,我如何存档?

编辑:  我想自动为类“building”中的所有对象创建gamma_v(作为数组)。最后的剧本中会有更多的“房子”。

2 个答案:

答案 0 :(得分:3)

您的hohenwinkel方法需要接受两个输入参数。非静态方法的第一个参数始终是对象本身(与C ++不同,您必须将其显式列为输入参数),第二个输入将是您的h变量。您还希望使用方法的输出参数实际返回gamma_v值。

function gamma_v = hohenwinkel(obj, h)
    d = sqrt(obj.xabstandsolar^2 + obj.yabstandsolar^2);
    gamma_v = atand((obj.hohe - h)/(d));
end

然后,您可以在每个建筑物上调用此方法以获取值

gamma_v1 = hohenwinkel(H1);
gamma_v2 = hohenwinkel(H2);

如果您想拥有一系列建筑物,可以创建该阵列

houses = [building(10,8,6,14,8), building(18,8,6,14,0)];
gamma_v = hohenwinkel(houses);

然后构造您的hohenwinkel函数以对每个函数进行操作并返回结果

function gamma_v = hohenwinkel(obj, h)

    if numel(obj) > 1
        % Compute hohenwinkel for each one
        gamma_v = arrayfun(@(x)hohenwinkel(x, h), obj);
        return
    end

    d = sqrt(obj.xabstandsolar^2 + obj.yabstandsolar^2);
    gamma_v = atand((obj.hohe - h)/(d));
end

答案 1 :(得分:0)

有一些棘手的解决方案(不推荐)(@ Suever解决方案更好)  你应该创建一个句柄类

 classdef gvclass<handle 
       properties 
            gvarr=[];
       end 
       methods 
            function setgvarr(obj,value)
                  obj.gvarr=[obj.gvarr,value];
             end
       end
  end

然后在您的构建类

中使用此类
classdef building<handle 
properties
  gv
  hohe = 0;
  lange = 0;
  breite = 0;
  xabstandsolar = 0;
  yabstandsolar = 0;
end

methods
  function obj = building(hohe, lange, breite, xabstandsolar, yabstandsolar,handle_of_your_gv_class,h)
    obj.hohe = hohe;
    obj.lange = lange;
    obj.breite = breite;
    obj.xabstandsolar = xabstandsolar;
    obj.yabstandsolar = yabstandsolar;
    obj.gv=handle_of_your_gv_class;
    obj.hohenwinkel(h);
   end

   function hohenwinkel(obj,h)

     d = sqrt(obj.xabstandsolar^2 + yabstandsolar^2);
     gamma_v = atand((obj.hohe - h)/(d));
     obj.gv.setgvarr(gamma_v);
   end 
  end
end

最后在创建任何建筑之前,你应该创建一个gv类的对象并将其传递给建筑构造函数,

Egv=gvclass();
H1 = building(10,8,6,14,8,Egv,2)
H2 = building(18,8,6,14,0,Egv,3)

并访问gv数组:

 Egv.gvarr

你应该在这个问题上做更多的努力来调试可能的错误。