回答編集履歴
2
描画するだけの話を追記
answer
CHANGED
@@ -66,4 +66,49 @@
|
|
66
66
|
}
|
67
67
|
```
|
68
68
|
|
69
|
-

|
69
|
+

|
70
|
+
|
71
|
+
---
|
72
|
+
|
73
|
+
円形の グラデーションを 描画 することが目的(結果の絵が欲しいだけ)なのであれば,
|
74
|
+
(コメントにも書いたように)単にその話をそのまま実施する,すなわち,明るさを変えながら円を複数回描画するのが最も素直と言える.(結果画像は割愛)
|
75
|
+
|
76
|
+
```C++
|
77
|
+
const int IMG_SIZE = 240; //画像サイズ(x,yで共用)
|
78
|
+
const int CENTER = IMG_SIZE/2; //てきとーに決めた円の中心(x,yで共用)
|
79
|
+
const int RADIUS = 100; //円の半径
|
80
|
+
|
81
|
+
int main()
|
82
|
+
{
|
83
|
+
//点Aの座標 = (Ax,Ay)
|
84
|
+
const int Ax = CENTER + 45;
|
85
|
+
const int Ay = CENTER + 25;
|
86
|
+
|
87
|
+
//MEMO : 正規化した世界で考えている変数は,変数名末尾にアンダーバー'_'を付与しています.
|
88
|
+
const double Ax_ = double(Ax-CENTER)/RADIUS;
|
89
|
+
const double Ay_ = double(Ay-CENTER)/RADIUS;
|
90
|
+
|
91
|
+
//画像バッファ準備
|
92
|
+
cv::Mat Img( IMG_SIZE, IMG_SIZE, CV_8UC1 ); //IMG_SIZE*IMG_SIZEの画像バッファを用意
|
93
|
+
Img = 100; //画像全体を背景の輝度値で埋めておく.値はてきとー.
|
94
|
+
|
95
|
+
//塗りつぶし円を256回描画する
|
96
|
+
for( int t=0; t<=255; ++t )
|
97
|
+
{
|
98
|
+
double t_ = t / 255.0; //0~1
|
99
|
+
double cx_ = Ax_ * t_; //円の中心
|
100
|
+
double cy_ = Ay_ * t_; //円の中心
|
101
|
+
double r_ = 1.0 - t_; //円の半径
|
102
|
+
|
103
|
+
int cx = CENTER + cvRound( cx_ * RADIUS );
|
104
|
+
int cy = CENTER + cvRound( cy_ * RADIUS );
|
105
|
+
int r = cvRound( r_ * RADIUS );
|
106
|
+
cv::circle( Img, cv::Point(cx,cy), r, cv::Scalar(t), -1 );
|
107
|
+
}
|
108
|
+
|
109
|
+
//結果画像の表示
|
110
|
+
cv::imshow( "Img", Img );
|
111
|
+
if( cv::waitKey() == 's' ){ cv::imwrite( "Result.png", Img ); }
|
112
|
+
return 0;
|
113
|
+
}
|
114
|
+
```
|
1
誤変換を修正
answer
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
点Aの場所がずれた場合,単純に,下図の真ん中のグラフのようになるのだと考える.
|
5
5
|
|
6
6
|
これを,下図右側の絵のように,たくさんの円盤(緑横線)を位置をずらしながら重ねたような形だと考えれば,
|
7
|
-
各円盤の
|
7
|
+
各円盤の径と中心位置は,明るさに対して線形に変化する形だ.
|
8
8
|
話を簡単にするために中心が原点の単位円で考えれば,明るさをt(0~1)としたとき,明るさtの円盤は
|
9
9
|
|
10
10
|
* 半径(t) = 1-t
|