satoh

知っているようで知らないデジタル図形処理 ~任意形状図形の選択から交点・接点・接線計算まで、方程式では解けないノウハウを紹介

3点から円

3点から円の中心と半径を求める

3点を通る円 円は一直線上ではない3点の座標があれば一意に決定します。 下図を参照してください。ここで、3点の座標を、     (x1, y1),  (x2, y2),  (x3, y3) 求める中心座標を、     (Cx, Cy) 求める半径を、     r とします。  ごく普通に3つの連立方程式を解いていきます …

円弧ヒットテスト

画面に描いた円弧をマウスで選択してみよう

  2016/01/25    C, ヒットテスト

円を選択する 円弧の選択を考える前に、円をマウスで選択することを考えます。 ここでいう選択は、円内部点ではなく、円周上をクリックしたとき「選択された」と考えます。 半径 R、中心点(Cx, Cy)の円を考えます。 これは簡単ですね。中心からクリックされた点の距離がRであればよいわけです。 しかしながら、デジタル処理での …

2点と半径から円-2つ

2点と半径から円の中心座標を求める

  2016/01/24    C, 交点・接線, 図形, 計算

ごく普通に解いてみる 2点と半径で円の中心が決まるのはごく簡単です。 こんな感じですね。 さて、当然の事ながら2次方程式の解ですので答えは最大2つ出てきます。 上図が一つの答えですが、この2点を通る中心位置が違う円がもうひとつあるのはすぐわかりますね。 上図のようになります。 プログラム 今回は簡単ですね。すぐプログラ …

2円の接線-4本

2つの円の接線を求める

2円の接線のパターン 2つの円に引かれる接線を求めてみましょう。 2円の接線が存在する条件としては、 ・片方の円がもう片方の円内部に完全に含まれないこと となります。 上図の場合は接線存在はしません。当然のことながら、  上図のような同心円もそれに含まれます。 では存在するパターンはどのようなものが考えられるでしょうか …

Win32API

自分自身を削除するプロセスを作ってみる

  2016/01/24    C, Win32API, Windows

起動中の自分自身を削除してアップデートさせる…? Windowsでは、実行中のプログラムやロード中のDLLを削除したり上書きしたりできません。 しかし、自分自身で削除して終了したり、アップデートしたりするにはどうしたらよいでしょうか? MoveFileEx()を使って、次回のリブート時に行うことは可能です。しかしこの方 …

円弧-開始点と終了点が別の象限にある場合

円弧を描いてみよう

  2016/01/23    C, アルゴリズム, 図形, 計算

今更、円弧を描く? 今ここには画面に点を打つだけのサービス(API)しか用意されていないグラフィックスライブラリがあると考えてください。 さあ、どうやって円を描く?どうやって円弧を描く? ……もうこんな機会はないかもしれません。 しかしそのおかげでデジタル処理で円弧(円も)を描くしくみに出会うことがなくなっています。こ …

日の出日没

日の出時間と日没時間の計算方法~プログラム編

  2016/01/22    C, ソーラー, 計算

日の出、日没、そして南中時刻を具体的に計算してみる 以前に日の出日没時刻計算の概要を示したので、今回は具体的な計算を示してみましょう。 既知なのは、日付と緯度・経度です。これらから日の出・日没・南中の時刻を求めます。 まず、以前の記事では省略してしまった、     Et    : 均時差[h]     δ     :  …

Win32API

OutputDebugStringで出力したデバッグライトを自前で受け取る

  2016/01/19    C, Win32API, Windows

デバッグ情報を自前で受け取りたい WindowsプログラムをCで組む時に使うもので、OutputDebugString()というWin32APiがあるのはご存知だと思います。 VisualStudioなど統合環境で開発しているならば、デバッグ中に出力ウインドウに出力することができます。 フリーウェアでもDbgMOnなど …

多角形の外の場合

画面に描いた多角形をマウスで選択してみよう

  2016/01/18    C, ヒットテスト

凸型多角形を選択する 三角形、四角形、さらに五角形以上の多角形をマウスで選択することを考えます。 ここでいう選択は、多角形の輪郭線上ではなく多角形の内部をクリックしたときを「選択された」と考えます。 また、このトピックでは凸型の多角形のみを扱います。 上記の様な場合を考えていきます。 外積を使う 2つのベクトルの外積は …

日の出日没

日の出時間と日没時間の計算方法

  2016/01/17    ソーラー, 計算

日の出時間と日没時間の差って… 釧路と沖縄の日の出時間は夏至で1時間40分、冬至で10分違います。 場所と季節で毎日変わっていくわけです。同一緯度であれば経度方向の距離がそのまま日の出日没時間差、つまり日照時間が同じということです。同一経度であれば緯度方向で日照時間が変化します。 おなじ日本でも釧路と沖縄では全然違うわ …