1
0
mirror of synced 2024-11-28 17:31:00 +01:00
OpenTaiko/FDK19/コード/00.共通/C変換.cs
2022-02-08 17:40:30 +01:00

259 lines
7.6 KiB
C#

using System;
using System.Collections.Generic;
using System.Text;
using SharpDX;
namespace FDK
{
public class C変換
{
// プロパティ
public static readonly string str16進数文字 = "0123456789ABCDEFabcdef";
public static readonly string str36進数文字 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
// メソッド
public static bool bONorOFF( char c )
{
return ( c != '0' );
}
public static double DegreeToRadian( double angle )
{
return ( ( Math.PI * angle ) / 180.0 );
}
public static double RadianToDegree( double angle )
{
return ( angle * 180.0 / Math.PI );
}
public static float DegreeToRadian( float angle )
{
return (float) DegreeToRadian( (double) angle );
}
public static float RadianToDegree( float angle )
{
return (float) RadianToDegree( (double) angle );
}
public static int n値を範囲内に丸めて返す( int n値, int n最小値, int n最大値 )
{
if( n値 < n最小値 )
return n最小値;
if( n値 > n最大値 )
return n最大値;
return n値;
}
public static int n値を文字列から取得して範囲内に丸めて返す( string str数値文字列, int n最小値, int n最大値, int n取得失敗時のデフォルト値 )
{
int num;
if( ( int.TryParse( str数値文字列, out num ) && ( num >= n最小値 ) ) && ( num <= n最大値 ) )
return num;
return n取得失敗時のデフォルト値;
}
public static double db値を文字列から取得して範囲内に丸めて返す( string str数値文字列, double db最小値, double db最大値, double db取得失敗時のデフォルト値 )
{
double num;
if( ( double.TryParse( str数値文字列, out num ) && ( num >= db最小値 ) ) && ( num <= db最大値 ) )
return num;
return db取得失敗時のデフォルト値;
}
// #23568 2010.11.04 ikanick add
public static int n値を文字列から取得して範囲内にちゃんと丸めて返す(string str数値文字列, int n最小値, int n最大値, int n取得失敗時のデフォルト値)
{
// 1 と違って範囲外の場合ちゃんと丸めて返します。
int num;
if (int.TryParse(str数値文字列, out num)) {
if ((num >= n最小値) && (num <= n最大値))
return num;
if ( num < n最小値 )
return n最小値;
if ( num > n最大値 )
return n最大値;
}
return n取得失敗時のデフォルト値;
}
// --------------------ここまで-------------------------/
public static int n値を文字列から取得して返す( string str数値文字列, int n取得失敗時のデフォルト値 )
{
int num;
if( !int.TryParse( str数値文字列, out num ) )
num = n取得失敗時のデフォルト値;
return num;
}
public static int n16進数2桁の文字列を数値に変換して返す( string strNum )
{
if( strNum.Length < 2 )
return -1;
int digit2 = str16進数文字.IndexOf( strNum[ 0 ] );
if( digit2 < 0 )
return -1;
if( digit2 >= 16 )
digit2 -= (16 - 10); // A,B,C... -> 1,2,3...
int digit1 = str16進数文字.IndexOf( strNum[ 1 ] );
if( digit1 < 0 )
return -1;
if( digit1 >= 16 )
digit1 -= (16 - 10);
return digit2 * 16 + digit1;
}
public static int n36進数2桁の文字列を数値に変換して返す( string strNum )
{
if( strNum.Length < 2 )
return -1;
int digit2 = str36進数文字.IndexOf( strNum[ 0 ] );
if( digit2 < 0 )
return -1;
if( digit2 >= 36 )
digit2 -= (36 - 10); // A,B,C... -> 1,2,3...
int digit1 = str36進数文字.IndexOf( strNum[ 1 ] );
if( digit1 < 0 )
return -1;
if( digit1 >= 36 )
digit1 -= (36 - 10);
return digit2 * 36 + digit1;
}
public static int n小節番号の文字列3桁を数値に変換して返す( string strNum )
{
if( strNum.Length >= 3 )
{
int digit3 = str36進数文字.IndexOf( strNum[ 0 ] );
if( digit3 < 0 )
return -1;
if( digit3 >= 36 ) // 3桁目は36進数
digit3 -= (36 - 10);
int digit2 = str16進数文字.IndexOf( strNum[ 1 ] ); // 2桁目は10進数
if( ( digit2 < 0 ) || ( digit2 > 9 ) )
return -1;
int digit1 = str16進数文字.IndexOf( strNum[ 2 ] ); // 1桁目も10進数
if( ( digit1 >= 0 ) && ( digit1 <= 9 ) )
return digit3 * 100 + digit2 * 10 + digit1;
}
return -1;
}
public static string str小節番号を文字列3桁に変換して返す( int num )
{
if( ( num < 0 ) || ( num >= 3600 ) ) // 3600 == Z99 + 1
return "000";
int digit4 = num / 100;
int digit2 = ( num % 100 ) / 10;
int digit1 = ( num % 100 ) % 10;
char ch3 = str36進数文字[ digit4 ];
char ch2 = str16進数文字[ digit2 ];
char ch1 = str16進数文字[ digit1 ];
return ( ch3.ToString() + ch2.ToString() + ch1.ToString() );
}
public static string str数値を16進数2桁に変換して返す( int num )
{
if( ( num < 0 ) || ( num >= 0x100 ) )
return "00";
char ch2 = str16進数文字[ num / 0x10 ];
char ch1 = str16進数文字[ num % 0x10 ];
return ( ch2.ToString() + ch1.ToString() );
}
public static string str数値を36進数2桁に変換して返す( int num )
{
if( ( num < 0 ) || ( num >= 36 * 36 ) )
return "00";
char ch2 = str36進数文字[ num / 36 ];
char ch1 = str36進数文字[ num % 36 ];
return ( ch2.ToString() + ch1.ToString() );
}
public static int[] ar配列形式のstringをint配列に変換して返す( string str )
{
//0,1,2 ...の形式で書かれたstringをint配列に変換する。
//一応実装はしたものの、例外処理などはまだ完成していない。
//str = "0,1,2";
if( String.IsNullOrEmpty( str ) )
return null;
string[] strArray = str.Split( ',' );
List<int> listIntArray;
listIntArray = new List<int>();
for( int n = 0; n < strArray.Length; n++ )
{
int n追加する数値 = Convert.ToInt32( strArray[ n ] );
listIntArray.Add( n追加する数値 );
}
int[] nArray = new int[] { 1 };
nArray = listIntArray.ToArray();
return nArray;
}
/// <summary>
/// 百分率数値を255段階数値に変換するメソッド。透明度用。
/// </summary>
/// <param name="num"></param>
/// <returns></returns>
public static int nParsentTo255( double num )
{
return (int)(255.0 * num);
}
/// <summary>
/// 255段階数値を百分率に変換するメソッド。
/// </summary>
/// <param name="num"></param>
/// <returns></returns>
public static int n255ToParsent( int num )
{
return (int)(100.0 / num);
}
public static Color4 n255ToColor4( int nR, int nG, int nB )
{
float fR = n255ToParsent( nR );
float fG = n255ToParsent( nG );
float fB = n255ToParsent( nB );
return new Color4( fR, fG, fB, 1f );
}
public static Color4 ColorToColor4(System.Drawing.Color col)
{
return new Color4(col.R / 255f, col.G / 255f, col.B / 255f, col.A / 255f);
}
#region [ private ]
//-----------------
// private コンストラクタでインスタンス生成を禁止する。
private C変換()
{
}
//-----------------
#endregion
}
}