*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*

<C#>
「マウス操作で、キャラクター画像を移動やズームさせる画像処理を、マルチスレッドで行なう。<時間差改善版>」のコード No.7


*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*

.






元のページ


元ページ「<C# > マウス操作で、キャラクター画像を移動やズームさせる画像処理を、マルチスレッドで行なう。<時間差改善版>」
http://note.chiebukuro.yahoo.co.jp/detail/n168447


記述量上限の制限で、ページを分けて記述しています。



 


 

本ページの前のページ


「マウス操作で、キャラクター画像を移動やズームさせる画像処理を、マルチスレッドで行なう。<時間差改善版>」のコード No.6
http://note.chiebukuro.yahoo.co.jp/detail/n171481

 

記述量上限の制限で、ページを分けて記述しています。





本ページの次のページ


「マウス操作で、キャラクター画像を移動やズームさせる画像処理を、マルチスレッドで行なう。<時間差改善版>」のコード No.8
http://note.chiebukuro.yahoo.co.jp/detail/n171483

 

記述量上限の制限で、ページを分けて記述しています。








はじめに


元ページの「<C#> マウス操作で、キャラクター画像を移動やズームさせる画像処理を、マルチスレッドで行なう。<時間差改善版>」におけるコードをここに記述します。








画像処理クラスのコード




using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;


// マウス操作で、キャラクター画像を移動やズームさせる画像処理を、
// マルチスレッドで行なう。<時間差改善版>
namespace ImageViewerThreadSimple2
{


    // ************************************
    // ************************************
    // 画像処理クラス
    //  本クラスは、画像移動を行なうスレッドを管理します。
    //  なお、本クラスは、画像移動等のグラフィック処理関係の要求受付を行な
    //  うクラスから呼び出されて実行されます。
    // ************************************
    // ************************************
    public partial class GraphicsThread
    {


        // ====================================
        // ************************************
        // 回転用要求電文に対応した処理
        // (続き)
        // ************************************
        // ====================================


        // ==============
        // 回転位置取得メソッド(絶対角度指定)
        // 第1引数: 現在位置のx座標
        // 第2引数: 現在位置のy座標
        // 第3引数: 回転の中心位置のx座標
        // 第4引数: 回転の中心位置のy座標
        // 第5引数: 回転させる角度 <単位は、ラジアン>
        //            --- 中心点から水平に右側に移動した位置を、
        //                零度(基準)と定めた角度で指定。
        // 第6引数: 回転後の位置のx座標を出力
        // 第7引数: 回転後の位置のy座標を出力
        public void RotatePosition(
            float Present_Position_X,
            float Present_Position_Y,
            float Center_Point_X,
            float Center_Point_Y,
            float Rotation_Angle,
            out float After_X,
            out float After_Y)
        {

            // 中心から現在位置までの距離を算出
            float dX = Present_Position_X - Center_Point_X;
            float dY = Present_Position_Y - Center_Point_Y;
            float Vector_Size = (float)Math.Sqrt(dX * dX + dY * dY);

            // 指定角度の位置を算出
            After_X = Center_Point_X + Vector_Size * (float)Math.Cos(Rotation_Angle);
            After_Y = Center_Point_Y + Vector_Size * (float)Math.Sin(Rotation_Angle);

        }

 

        //=====================
        // 位置座標回転位置取得メソッド(相対角度指定)
        //  --- ある位置座標を回転させた時の座標位置を算出する。
        // 第1引数: 現在位置のx座標
        // 第2引数: 現在位置のy座標
        // 第3引数: 回転の中心位置のx座標
        // 第4引数: 回転の中心位置のy座標
        // 第5引数: 回転させる角度(増分) <単位は、ラジアン>
        // 第6引数: 回転後の位置のx座標を出力
        // 第7引数: 回転後の位置のy座標を出力
        //=====================
        public void RotatePositionAtDesignatedAngle(
            float Present_Position_X,
            float Present_Position_Y,
            float Center_Point_X,
            float Center_Point_Y,
            float Step_Angle,
            out float After_X,
            out float After_Y)
        {

            //------------
            // 中心から現在位置までの距離を算出
            //------------

            float Vector_Size;  // 中心から現在位置までの距離
            float Vector_Angle; // 中心から現在位置までの角度

            float dX = Present_Position_X - Center_Point_X; // x増分
            float dY = Present_Position_Y - Center_Point_Y; // y増分

            // x,y座標による成分を、大きさと角度による成分に変換
            ConvertFromXYToSizeAngle(
                dX,
                dY,
                out Vector_Size,
                out Vector_Angle);


            //------------
            // 回転角度(増分)だけ回転させた角度を算出
            //------------
            float Rotation_Angle = Vector_Angle + Step_Angle;


            //------------
            // 指定角度の位置を算出
            //------------

            After_X = Center_Point_X + Vector_Size * (float)Math.Cos(Rotation_Angle);
            After_Y = Center_Point_Y + Vector_Size * (float)Math.Sin(Rotation_Angle);

        }

 

    }
}



さいごに


本ページの内容説明については、元ページを参照して下さい。