解析/共通処理

From Ylvapedia
Revision as of 14:38, 21 March 2025 by びゃっこ (talk | contribs)


バージョン EA23.106: この記事は、Elin最新の安定版リリースに、少なくとも20のマイナーバージョンが遅れています。ページの更新をお願いします。

このページではElinのプログラム中で頻出する共通の処理について記載します。

CURVE関数

バージョン EA23.46 のCURVE 関数の入力(オレンジ色)と出力(藍)です。Output = Curve(Input, 50, 25, 75)

CURVE関数とはElinにて、値の有効性を段階的に抑制する処理です。

EClass.cs内で以下のように定義されています。

public static int curve(int a, int start, int step, int rate = 75)
{
	if (a <= start)
	{
		return a;
	}
	for (int i = 0; i < 10; i++)
	{
		int num = start + i * step;
		if (a > num)
		{
			a = num + (a - num) * rate / 100;
			continue;
		}
		return a;
	}
	return a;
}

「a」はCURVE関数で抑制を行う値(以下、入力値 )です。

「start」はCURVE関数で抑制がかかりはじめるまでの閾値(以下、抑制閾値 )です。例えばstart=150の場合、aが151以上であればCURVE関数による抑制が働きます。

「rate」は抑制の比率を百分率で表した数値(以下、抑制比率 )です。抑制対象の数値はこの%分の値になるように計算されます。

「step」は次の抑制までの閾値(以下、抑制段階 )です。


以下はCURVE関数についての解説です。(わかりやすさの為Elinのプログラムと同じではありませんが、等価です)

0. 抑制回数の変数(以下、抑制回数 )に1を代入します。

1. まずは抑制対象となる値を算出します。

抑制対象値 = 入力値 - 抑制閾値

2. 抑制対象値 <= 0の場合、入力値を返却して終了します。

3. 抑制値を算出します。

抑制値 = 抑制対象値 × 抑制比率 / 100

4. 抑制値 <= 抑制段階 か 抑制回数 == 10 のどちらかを満たす場合、以下の式で算出される抑制結果を返却して終了します。

抑制結果 = 抑制値 + 抑制閾値 + 抑制段階 × (抑制回数 - 1)

5. 抑制対象値に以下の式の値を代入します。

抑制対象値 = 抑制値 - 抑制閾値

6. 値が返却されるまで3~5を繰り返します。


関数の曲線の傾きは徐々に小さくなり、最終的には(抑制比率 / 100)^10 となります。