プログラムの事とか

お約束ですが「掲載内容は私個人の見解です」

自己交差ポリゴンを分割する

どういうことかというとこういうことをやりたいんです

f:id:puni-o:20180330100108j:plain

WPFの画面ですが、左側は5点で構成されているポリゴンです

FillRuleがEvenOddになっているので偶数回重なっているところは塗りつぶさないようになってます

んで、これを右側のように5個のポリゴンに分けたいんです

自己交差ポリゴンに対応していないようなうんこソフトに対応するためしょーがない、やらなきゃいけない

Clipper

今更車輪の再発明してできの悪いわっか作ってもしょうがないのでググりますとでてきますよすごいライブラリ

Clipper - an open source freeware polygon clipping library

クリッピングの便利ライブラリらしいですよ。URLにdelphiとか入っていますがC#用もあります

このクラスの中に

//------------------------------------------------------------------------------
// SimplifyPolygon functions ...
// Convert self-intersecting polygons into simple polygons
//------------------------------------------------------------------------------
public static Paths SimplifyPolygon(Path poly, PolyFillType fillType = PolyFillType.pftEvenOdd)

まさにそのものがあります

呼ぶのも簡単で

var p = new List<IntPoint>();
foreach (var point in _clickPoints) p.Add(new IntPoint(point.X, point.Y));  // _clickPointsに元の座標が入っている
var sp = ClipperLib.Clipper.SimplifyPolygon(p);

SimplifyPolygonでポリゴン単位に分けてくれるのであとはそれを好き勝手すればいいんです

ということで

f:id:puni-o:20180330102048g:plain

確認するためにポリゴン毎に色を分けて表示するようにしてみましたがいい感じに分かれてくれてます

めでたしめでたし


追記

ClipperはNuGetででてきますね

Surface Laptop のWindows 10 Proが認証失敗して困った話

スクショとか取ってなかったので記憶を頼りに箇条書き風な感じで

経緯

買った

Surface Laptopだよ

入っているOSはWindows 10 Sだよ

使ったことないよ

Proにアップグレードした

今月まで無料で上げられるよ

Windows Updateかけまくった

それはそれはかけまくったさ

失敗するやつがでてきた

たしかKB4088776だったはず

再起動しろっていうからするんだけど、何度再起動しても再起動しろって言ってきた

どうせ1803入れたら消えるだろうからそれまで放っておこうと思ったんだけど、ほかの奴らがそれに引きずられてうまく入らなくてこまった(.Net 3.5とか)

初期状態に戻した

いろいろ試したけどどうしてもKB4088776が入らなくて初期化した方が速いと判断して初期化

Windows Updateかけまくった

全部できた

ライセンス認証しろって言われた

そんなばかな

いろいろためした

Microsoftアカウントに紐づいたやつは別のWindowsで使われているらしい。それはこのLaptopのはずなのに

あきらめてサポートに電話した

つながるまでが第一関門

サポートの人がやってくれたこと

リモートアシスタンスでつないであとはお任せ

お、おまえまだいたのか!

はじめて使ったよ

マザーボードからライセンスキーを引っ張る

って言ってた

マザーボードにそんなもん入ってるんだ

コマンドは多分これ

www.thewindowsclub.com

とってきたキーで認証

Windows 10 S になった!!!!

10 Sになったのがライセンス認証画面のWindows エディションの文字だけなのか、動きもそうなのかすごく気になったけどリモート中なので試せなかった。残念

あとはストアからProに上げるだけ

ストアのアカウント情報が変だったっぽくてはじめは有料ボタンしかなかったけど、アカウント情報確認した後にもう一度ストア開いたらちゃんと無料で更新ボタンになってた

押したら特に何かが動くということもなく、ライセンス認証画面がWindows 10 Proになってた

感想

Win10の認証は普段は楽させてもらっているので文句は特にないです

サポートは通話先(電話が切れた時用)の確認が面倒だと思った

電話番号聞いて、名前聞いて、メールアドレス聞いて、ってのが面倒

電話番号は掛けている携帯の番号引っ張ってこれそうなものだし、その電話番号からMicrosoftのアカウント引っ張ってこれそうだから自動で出来そうなものなんだけど、なんかプライバシー的なリスクでもあるのかな?

とりあえずやっと普通に使えるLaptopになりました

あと後でライセンスキー入れて10 Sにしたいと思いつつも、トラブル面倒なのできっとやりません

Laptop持っている暇な人いたら試してほしいです

Python勉強する その2

危うく1回で終わりそうだった

Pythonの入門記事ググって試したことを書きなぐってるだけです。もうすぐ飽きます

過去はこれ

Python勉強する その1 - プログラムの事とか

変数の宣言

いま流行りのvarとかいらないっぽいです

a = 1
b = 2.3
c = a + b
print (c)  # 3.3

docstring

定義の上にダブルクォーテーション3つで囲った文字列を入れておくといいらしい

参照は__doc__

クラスの定義とかメソッドの説明とか書くみたい

"""Hoge"""
print(__doc__)  # Hoge

ブロック

コードのインデント(スペースの数)で区別するっぽい。

if a == 1:
    print("a = 1")
    print("まだifの中")
print("ifの外")

タブとスペースが混在すると死にそうだけど、Visual Studioではタブはデフォルトでスペース4個になるっぽい

関数の宣言

def ~ : って感じで書く

def add(x,y):
    """足すよ"""
    a = x + y;
    return x + y

print(add.__doc__)  # 足すよ
print(add(3,4))  # 7

ラムダ式

lambdaで行ける

func = lambda x, y : x + y
print(func(3,4))  # 7

クラス

class ClassA:
    """Example class"""

    def __init__(self, arg):
        print("init")
        self.name = arg

    def __del__(self):
        print("del")

    def __str__(self):
        return "ClassA " + self.name

    def greet(self):
        print("Hello")


print(ClassA.__doc__)  # Example class
a = ClassA("abc")   # init
a.greet()  # Hello
print(a)  # ClassA abc
del a  # del

__init__

コンストラクタ

__del__

デストラクタ

__str__

ToString()

__name__ と __main__

if __name__ == '__main__':
    print('Entry point')

って覚えておけばいいんじゃね?


飽きなければ続きます