C#_全てのチェックボックスに対しての操作

以前書いたコード見直したら意味が分からなかったので。

 

グループボックスを親としたチェックボックスを作成すれば for で操作できる。

    foreach (Control item in groupBox1.Controls)
    {
        if (item.GetType().Equals(typeof(CheckBox)))
        {
          ((CheckBox)item).Checked = true;
        }
    }

 

ex ) いろいろコード略

    GroupBox groupBoxP = new GroupBox();
    CheckBox checkBox01 = new CheckBox();
    CheckBox checkBox02 = new CheckBox();
   
    checkBox01.Location = new Point(
    checkBox01.Size = new Size(
    checkBox01.Parent = groupBoxP;
   
    checkBox02.Location = new Point(
    checkBox02.Size = new Size(
    checkBox02.Parent = groupBoxP;
   
   
    for (int i = 0
    {
        ((CheckBox)groupBoxP.Controls[i]).Checked = true;
        // groupBoxP.Controls[i] の型は Control
    }

GroupBox の Controls に
CheckBox などの Control が入っているからそれを取り出す。

※型に注意。

 

こちらから。
https://www.itlab51.com/?p=3726

以上。

OpenCV_ 2 点間の距離を求める

.x や pow、sqrt 使わないから楽。

cv::norm を使う。

    cv::Point2f a(1, 3);
    cv::Point2f b(9, 14);
    float ans = cv::norm(a - b);
    std::cout << and << std::endl;  //13.6015

 

 

ノルム ( 複数の説明引用 )

・n 次元空間におけるベクトル間の距離を表わすもの。
・いろいろなものの「大きさ」を表わす量
・ベクトル空間に対して「距離」を与える為の、数学の道具。

距離を表現するに足りる性質させ満たしていれば、全てノルム。

 

 

こちらから。
http://opencv.jp/cookbook/opencv_linalg.html#id4
https://stackoverflow.com/questions/8269605/opencv-c-distance-between-two-points
http://answers.opencv.org/question/14188/calc-eucliadian-distance-between-two-single-point/
https://na-inet.jp/nasoft/chap08.pdf
(↑ C とか R は複素数、実数の意味かと
https://ja.wikipedia.org/wiki/%E6%95%B0%E5%AD%A6%E8%A8%98%E5%8F%B7%E3%81%AE%E8%A1%A8   )
https://mathtrain.jp/lpnorm
https://ja.wikipedia.org/wiki/%E3%83%8E%E3%83%AB%E3%83%A0

以上。

Visual Studio_改行コードを一括返還

CRLF で書いていたはずなのに、気づいたら全てのファイルが LF になってた。

  1. メニューバー の [ ファイル ] をクリック。
  2. [ 保存オプションの詳細設定 ] をクリック。
  3. [ 行の終わり ] の下にあるセレクトボックスから
    [ Windows (CR LF) ] を選択して OK 。

 

f:id:koshinRan:20180913212946p:plain

 

 

こちらから。
http://yukinarit84.blogspot.com/2013/05/visualstudio.html

以上。

OpenCV_Rect の追記

C# Rectにおける BottomLeft などと同様の関数があった。

 

tl 左上の座標を返し、br 右下の座標を返す。

ex )

    cv::Rect hgoe(0, 10, 100, 200); //(x, y、w, h)
    hoge.tl(); // [0, 10]
    hoge.br(); // [100, 210]
    hoge.size(); // [100 * 200]

 

 

こちらから。
http://opencv.jp/opencv-2svn/cpp/basic_structures.html#rect
http://pynote.hatenablog.com/entry/opencv_cvrect

 

以上。

↑ Rect_ の箇所。 ↑ 部分画像 ( 画像から矩形範囲を指定 ) の箇所。

ポリモーフィズム ( 多態性 ) とは

よく分からなかったが「なぜ必要か」を読んだらわかったと思う。例ソース見た方が分かりやすいかも。

オブジェクトが複数の型属することを許す性質のこと。

 

同じメソッド呼び出しに対し、異なるオブジェクトごとが各動作をすること。
( 共通のメソッドを呼び出すが、オブジェクトによってその機能を変化させる。
  ex ) getGreek( ) を呼びだしているが、Alpha 、Beta 、Gamma と各動作をしている。

抽象クラスインターフェースなどを利用してメソッドの呼び出し方を共通化し、
さらに、オーバーライドさせることで同じメソッドを呼び出しても、
実際のインスタンスごとにその挙動を変化させようとするもの。
クラスの連携・メソッドの呼び出しを子クラスの型でなく、
親クラスの型で行える為、クラスの独立性を高めることになる。独立性?

抽象クラス
中身のない定義が含まれるクラス。

インターフェース
一切中身を持たないクラス。中身はインスタンス先で実装。

オーバーライド
親クラスで定義されているメソッドを子クラスで再定義すること。

・オーバーライドは継承。オーバーロードは継承関係ない。
スーパークラスはベースクラス、基底クラスとも。サブクラスは派生クラスともいう。

 

 

なぜ必要か

この機能がないと、各子クラスのインスタンスを別々に生成しなければならない。
子クラスの変数に別のクラスのインスタンスを代入できないから。

ポリモーフィズムを実装することにより、一つの親クラスの変数
他の子クラスインスタンス代入できるので、
統一した記述方法それぞれのオーバーライドメソッドを呼び出すことができる。
つまり、サブクラスごとに全く別の機能とすることが出来る。

 

Java からのソース引用 ※色々略・動かしてない。
main は getGreek( ) を呼んでいる。
getGreek( ) の戻り値は、親クラスの配列だが、
配列の中には各子クラスのインスタンスが入っている。

        public static void main()
        {
            Greek[ ] g = Language.getGreek();
           
            // αβγが表示
            for(gStr : g)
            {
                gStr.Show();
            }
           
            //この書き方も可かと
            Greek gA = new Alpha();
            Greek gB = new Beta();
        }

    class Language
    {
        public static Greek[ ] getGreek()
        {
            Greek[ ] greekStr = { new Alpha(), new Beta(), new Gamma() };
            return greekStr;
        }
    }

    abstract class Greek  // 抽象クラス
    {
        public abstract void Show();
    }

    class Alpha extends Greek  // class Alpha : Greek [ C# ver ]
    {
        public void Show()  // public override void Show(); [ C# ver ]
        {
            System.put.println("α");
        }
    }
   
    class Beta extends Greek
    {
        public void Show()
        {
            System.put.println("β");
        }
    }
   
    class Gamma extends Greek
    {
        public void Show()
        {
            System.put.println("γ");
        }
    }

C# ではメソッドをオーバーライドする時、意図しないところでメソッドが
オーバーライドされるのを防ぐため、override キーワードを付ける。

 

 

こちらから。
https://qiita.com/lrf141/items/a2f764c8d87de26b6f45
http://garicchi.hatenablog.jp/entry/2014/09/11/181456
https://ufcpp.net/study/csharp/oo_polymorphism.html

以上。

C#_キャスト ( アップキャスト・ダウンキャスト )

アップキャスト
親クラス変数派生クラス代入すること。    Base b = new SubClass();

ダウンキャスト
がダウンキャスト。    SubClass s = new Base();

 

アップキャストは常に安全に行うことができるが、
ダウンキャストは危険な時もある。

 

ex )

    Base s1 = new Sub1(); // OK
    Base s2 = new Sub2(); // OK
   
    Base b;
    Sub1 s;
   
    b = s1;         // アップキャスト。暗黙的型な変換。実行すると b は Sub1だった気がする。
    s = (Sub1)b // ダウンキャスト。明示的なキャスト必要。
                // ないとコンパイルエラーとなる。「 Base を Sub1 に変換できません」
   
    b = s2;  // 実行すると b は Sub2 型。
    s = (Sub1)b;
    // コンパイルは通るが実行時にエラー。InvalidCastException 例外発生。
    // 「 Sub2 のオブジェクトを型 Sub1 にキャストできません」

 

対処 ( is 演算子 as 演算子 )

is 演算子

変換元 is 変換先型
変数元が変換先型にキャスト可能なら true、不可なら false。

ex )

    Base b = new Sub1();
    b = new Sub2();
    if( b is Sub1 ) // 結果は false
    {

C# 7 ではキャストできる時、キャストした結果を変数に入れることができる。
変換元 is 変換先型 キャストしたオブジェクト格納変数

    if(b is Sub2 sub2)
    {

 

as 演算子

変換先 = 変換元 as 型名
変換できない場合、結果が null になる。

ex )

    Base b = new Sub1();
    Sub1 s;
    s = b as Sub1; // OK
   
    b = new Sub2();
    s = b as Sub1;  // null

参照型への変換のみ。( ) 使用の型変換は値型・参照型問わず。sub s = (sub)super

 

 

こちらから。
https://ufcpp.net/study/csharp/oo_polymorphism.html
http://www.atmarkit.co.jp/ait/articles/0304/04/news004.html

 以上。

C++_例外メッセージを受け取る

exception クラスの what を使う。

 

    try
    {
       
    }
    catch (std::exception & e)
    {
        std::cout << e.what() << std::endl;
    }

 

 

こちらから。
https://cpprefjp.github.io/reference/exception/exception.html

 

以上。

Debug で動かしてコンソールにメッセージが出力されているのに、
どうも要領を得ないメッセージで困った ( 検索すると他では何が悪いのか表示されている ) 。
try - catch でかこって e.what() でまともなメッセージが出た。