C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.78151 の関連記事表示

<< 0 >>
■78151  Re[9]: 演算について(C#)
□投稿者/ タカタ -(2015/12/17(Thu) 19:24:13)
    皆様、ご回答有難う御座います。長文になりますがとりあえずプログラム貼り付けます。

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Drawing.Drawing2D;
    using System.Windows.Forms;

    namespace WindowsFormsApplication7
    {
    public partial class Form1 : Form
    {
    //計算に使用する各パラメータを定義
    float platenPCD01;
    float platenPCD02;
    float module;
    float gearINT;
    float gearSUN;
    float waferPCD;
    float waferPosition;
    float rpmUpper;
    float rpmLower;
    float rpmINT;
    float rpmSUN;
    float rpmWafer;
    float Theta;

    public Form1()
    {
    InitializeComponent();

    platenPCD01 = 1420;
    platenPCD02 = 430;
    module = 5;
    gearINT = 290;
    gearSUN = 80;
    waferPCD = 300;
    waferPosition = 150;
    rpmUpper = -10;
    rpmLower = 10;
    rpmINT = 30;
    rpmSUN = 10;
    rpmWafer = 0;
    float CRV = ((gearSUN * rpmSUN) + (gearINT * rpmINT)) / (gearSUN + gearINT);
    float CRO = ((((module * gearINT) / 2) * rpmINT) - (((module * gearSUN) / 2) * rpmSUN)) / ((module * gearINT - module * gearSUN) / 2);
    float Time = Theta / 36;
    double dThetaC = CRV / 60 * Math.PI * Time;
    float ThetaC = (float)dThetaC;
    }

    private void numericUpDown1_ValueChanged(object sender, EventArgs e)
    {
    }

    private void Form1_Paint(object sender, PaintEventArgs e)
    {
    platenPCD01 = 1420;
    platenPCD02 = 430;
    module = 5;
    gearINT = 290;
    gearSUN = 80;
    waferPCD = 300;
    waferPosition = 150;
    rpmUpper = -10;
    rpmLower = 10;
    rpmINT = 30;
    rpmSUN = 10;
    rpmWafer = 0;

    float CRV = ((gearSUN * rpmSUN) + (gearINT * rpmINT)) / (gearSUN + gearINT);
    float CRO = ((((module * gearINT) / 2) * rpmINT) - (((module * gearSUN) / 2) * rpmSUN)) / ((module * gearINT - module * gearSUN) / 2);

    float Time = Theta / 36;

    double dThetaC = CRV / 120 * Math.PI * Time;
    float ThetaC = (float)dThetaC;

    double dThetaW = CRO / 120 * Math.PI * Time;
    float ThetaW = (float)dThetaW;

    double dThetaWW = (CRO + rpmWafer) / 120 * Math.PI * Time;
    float ThetaWW = (float)dThetaWW;

    double dThetaL = rpmLower / 120 * Math.PI * Time;
    float ThetaL = (float)dThetaL;

    double dThetaL0 = rpmLower / 120 * Math.PI * ((Theta - 1) / 36);
    float ThetaL0 = (float)dThetaL0;

    double dWXC = ((module * gearSUN) / 2 + ((module * gearINT - module * gearSUN) / 4)) * Math.Cos(ThetaC) + waferPosition / 2 * Math.Cos(ThetaW);
    double dWYC = ((module * gearSUN) / 2 + ((module * gearINT - module * gearSUN) / 4)) * Math.Sin(ThetaC) + waferPosition / 2 * Math.Sin(ThetaW);
    float WXC, WYC;
    WXC = (float)dWXC;
    WYC = (float)dWYC;

    double dThetaC0 = CRV / 120 * Math.PI * ((Theta - 1) / 36);
    float ThetaC0 = (float)dThetaC0;
    double dThetaW0 = CRO / 120 * Math.PI * ((Theta - 1) / 36);
    float ThetaW0 = (float)dThetaW0;

    double dWXC0 = ((module * gearSUN) / 2 + ((module * gearINT - module * gearSUN) / 4)) * Math.Cos(ThetaC0) + waferPosition / 2 * Math.Cos(ThetaW0);
    double dWYC0 = ((module * gearSUN) / 2 + ((module * gearINT - module * gearSUN) / 4)) * Math.Sin(ThetaC0) + waferPosition / 2 * Math.Sin(ThetaW0);
    float WXC0, WYC0;
    WXC0 = (float)dWXC0;
    WYC0 = (float)dWYC0;

    double dThetaWW0 = (CRO + rpmWafer) / 120 * Math.PI * ((Theta - 1) / 36);
    float ThetaWW0 = (float)dThetaWW0;

    double dX150r0d = WXC + 150 * Math.Cos(ThetaWW + 0);
    double dY150r0d = WYC + 150 * Math.Sin(ThetaWW + 0);
    float X150r0d, Y150r0d;
    X150r0d = (float)dX150r0d;
    Y150r0d = (float)dY150r0d;

    double dX150r0d0 = WXC0 + 150 * Math.Cos(ThetaWW0 + 0);
    double dY150r0d0 = WYC0 + 150 * Math.Sin(ThetaWW0 + 0);
    float X150r0d0, Y150r0d0;
    X150r0d0 = (float)dX150r0d0;
    Y150r0d0 = (float)dY150r0d0;

    float VX150r0d = X150r0d - X150r0d0;
    float VY150r0d = Y150r0d - Y150r0d0;

    double dR150r0d = Math.Sqrt((X150r0d * X150r0d) + (Y150r0d * Y150r0d));
    float R150r0d;
    R150r0d = (float)dR150r0d;

    float M;
    if (X150r0d < 0)
    {
    M = 180;
    }
    else if (X150r0d > 0 && Y150r0d < 0)
    {
    M = 360;
    }
    else
    {
    M = 0;
    }

    double dT150r0d = Math.Atan(Y150r0d / X150r0d) * 180 / Math.PI + M;
    float T150r0d;
    T150r0d = (float)dT150r0d;
    double dVXP150r0d = (-R150r0d * (ThetaL)) * Math.Sin(T150r0d / 180 * Math.PI) - (-R150r0d * (ThetaL0)) * Math.Sin(T150r0d / 180 * Math.PI);
    float VXP150r0d, VYP150r0d;
    VXP150r0d = (float)dVXP150r0d;
    double dVYP150r0d = (R150r0d * (ThetaL)) * Math.Cos(T150r0d / 180 * Math.PI) - (R150r0d * (ThetaL0)) * Math.Cos(T150r0d / 180 * Math.PI);
    VYP150r0d = (float)dVYP150r0d;
    float VRX150r0d = VX150r0d - VXP150r0d;
    float VRY150r0d = VY150r0d - VYP150r0d;
    double dSR150r0d = (Math.Sqrt((VRX150r0d * VRX150r0d) + (VRY150r0d * VRY150r0d)));

    if (R150r0d > platenPCD01 / 2 && R150r0d < platenPCD02 / 2)
    {
    dSR150r0d = 0;
    }
    float SR150r0d;
    SR150r0d = (float)dSR150r0d;

    int SSSR150r0d;
    SSSR150r0d = (int)SR150r0d;


    float SSR150r0d = 0;
    for (int d = 1; d <= Theta; d++)
    {
    SSR150r0d += SSSR150r0d;
    }



    label35.Text = "移動量の総和: " + SSSR150r0d.ToString("F1");
    label28.Text = "移動量: " + SSR150r0d.ToString("F1");
    label30.Text = "Theta: " + Theta;
    }

    private void hsbPhase_Scroll(object sender, ScrollEventArgs e)
    {
    Theta = hsbPhase.Value;
    Refresh();
    }

    private void btnAuto_Click(object sender, EventArgs e)
    {
    if (btnAuto.Text == "自動")
    {
    btnAuto.Text = "停止";
    timer1.Interval = 1;
    timer1.Start();
    }
    else
    {
    btnAuto.Text = "自動";
    timer1.Stop();
    }
    }
    private void timer1_Tick(object sender, EventArgs e)
    {
    if (hsbPhase.Value < hsbPhase.Maximum)
    {
    hsbPhase.Value += 1;
    }
    else
    {
    hsbPhase.Value = hsbPhase.Minimum;
    }
    Theta = hsbPhase.Value;
    Refresh();
    }
    }
    }

    計算を始めるボタンを設けて、ボタンを押すと変数 Theta が1ずつ増えていきます。Thetaの値はスクロールバーとも連動しています。

    変数がたくさんありますが、Thetaの値が1ずつ増えていったときの SSSR150r0d の値を見てみると、

    Theta が 100くらいまでは、SSSR150r0d の値は 9 という値になっていますが、その後、8・・・7・・・6・・・ と変化していきます。

    SSR150r0d は SSSR150r0d の値の総和を見ていますが、なぜか 1200くらいまで増えていったときに、一旦 1000 に下がり、

    また1100 まで増えると 1000 になったりと、変な挙動を示しております。


    無理やりプログラムを貼り付けてしまってご迷惑おかけします。
記事No.77967 のレス /過去ログ132より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -