2017-11-16 4 views
1

非スカラーの列挙メンバーを持つことは可能ですか?Matlabの非スカラー列挙

たとえば、メソッドを使用せずに、各色が(プロットに必要な)1x3の倍数であるように色を列挙するにはどうすればよいですか?次のクラス定義

classdef color 
    properties 
     R, G, B 
    end 
    methods 
     function c = color(r, g, b) 
      c.R = r; 
      c.G = g; 
      c.B = b; 
     end 
     function g = get(c) 
      g = [c.R, c.G, c.B]; 
     end 
    end 
    enumeration 
     red (1, 0, 0) 
     green (0, 1, 0) 
    end 
end 

私は[0 1 0]を取得するためにcolor.green.get()を書くことができますが、私は、コードクリーナーを作るためにcolor.greenと同じ結果をしたいと思います。

異なる解決策がグローバル構造体としてcolorに設定されている可能性がありますが、グローバル変数が混乱を招く可能性があり、各スクリプト/関数にglobal color;を書き込む必要があるため実用的ではありません。

答えて

1

私はあなたがここに求めているものは正確ではありませんが、主な答えはあなたが現在基本的に正しいことをしていると思います。

クラスを使用して、非スカラー配列の列挙型を持つことができます。たとえば、mycolors = [color.red, color.green]を作成できます。

classdef color2 
    properties 
     RGB 
    end 
    methods 
     function c = color2(r, g, b) 
      c.RGB = [r,g,b]; 
     end 
    end 
    enumeration 
     red (1, 0, 0) 
     green (0, 1, 0) 
    end 
end 

、その後、あなただけのcolor2.red.RGBを言うことができるとあなたが[1,0,0]を取得したい:あなたはまた、次のような非スカラ特性を持つ列挙を持つことができます。

しかし、私はそれらのどちらもあなたが望むものではないと推測しています。あなたがちょうどcolor3.redを入力し、あなたが[1,0,0]を取得したい

classdef color3 < double 
    enumeration 
     red ([1,0,0]) 
     green ([0,1,0]) 
    end 
end 

:私はあなたが目指している想像し、残念ながらあなたは明示的がないができるか、のようなものがある事。列挙型が組み込み関数から継承されるときにスカラーでなければならないので、これを行うことはできません。個人的に

、私は何をやっている基本的にやるだろうが、あなたはまた、それにいくつかの他の方法を与える場合は特に(非常に自然な感じている、color.red.toRGBを言うと思いますので、代わりにあなたの方法getを呼び出すので、私は、toRGBそれを呼ぶだろうtoHSVまたはtoHexも同様)。出力RGB値のn行3列をあなたがn色の配列を渡すことができますこの方法

function rgb = toRGB(c) 
     rgb = [[c.R]', [c.G]', [c.B]']; 
end 

を、そしてそれは以下となります。それは色の配列を受け入れることができるように、私も、少しそれを変更したいです。たとえば、mycolors = [color.red, color.green]; mycolors.toRGBとすれば、[1,0,0;0,1,0]になります。

希望に役立ちます!

+0

私はcolor3のソリューションを望んでいましたが、私の例の改善は本当に感謝しています!ありがとう! – duri