コード例 #1
0
ファイル: MainLogic.cs プロジェクト: ryujimiya/delfem4net
        /// <summary>
        /// 問題を設定する
        /// </summary>
        /// <returns></returns>
        private bool setNewProblem()
        {
            bool success = false;

            Console.WriteLine("SetNewProblem() " + ProbNo);
            try
            {
                clearAFix(AFix);
                clearARB(ARB);
                CurTime = 0;

                if( ProbNo == 0 )
                {
                    CRigidBody3D rb = new CRigidBody3D();
                    // Note: DelFEM4Netでは、irb.ini_pos_cgはコピーを取得するプロパティなので、変更したらセットする必要があります。
                    //rb.ini_pos_cg.SetVector(1.0,0,0);  // 変更はrbへは反映されません
                    rb.Set_ini_pos_cg_Vector(1.0, 0, 0);
                    ARB.Add(rb);
                    CFix_Spherical fix = new CFix_Spherical(0);
                    fix.SetIniPosFix(0,0,0);
                    AFix.Add( fix );
                }
                else if( ProbNo == 1 )
                {
                    double tot_len = 3.0;
                    uint nRB = 6;
                    double div_len = tot_len / nRB;
                    for (uint irb = 0; irb < nRB; irb++)
                    {
                        CRigidBody3D rb = new CRigidBody3D();
                        rb.Set_ini_pos_cg_Vector(div_len*(irb+1),0,0);
                        ARB.Add(rb);
                        if ( irb == 0 )
                        {
                            CFix_Spherical fix = new CFix_Spherical(irb);
                            fix.SetIniPosFix(0,0,0);
                            AFix.Add( fix );
                        }
                        else
                        {
                            CJoint_Spherical fix = new CJoint_Spherical(irb - 1, irb);
                            fix.SetIniPosJoint(div_len * (irb + 0.5), 0, 0);
                            AFix.Add( fix );
                        }
                    }
                }
                else if( ProbNo == 2 )
                {
                    {
                        CRigidBody3D rb = new CRigidBody3D();
                        rb.Set_ini_pos_cg_Vector(1.0, 0, 0);
                        ARB.Add(rb);
                    }
                    {
                        CRigidBody3D rb = new CRigidBody3D();
                        rb.Set_ini_pos_cg_Vector(1.0, 1, 0);
                        ARB.Add(rb);
                    }
                    {
                        CRigidBody3D rb = new CRigidBody3D();
                        rb.Set_ini_pos_cg_Vector(2.0, 1, 0);
                        ARB.Add(rb);
                    }
                    {
                        CFix_Hinge fix = new CFix_Hinge(0);
                        fix.SetIniPosFix(0,0,0);
                        fix.SetAxis(0,1,0);
                        AFix.Add( fix );
                    }
                    {
                        CJoint_Hinge fix = new CJoint_Hinge(0,1);
                        fix.SetIniPosJoint(1,0.5,0);
                        fix.SetAxis(1,0,0);
                        AFix.Add( fix );
                    }
                    {
                        CJoint_Spherical fix = new CJoint_Spherical(1,2);
                        fix.SetIniPosJoint(1.5,1,0);
                        AFix.Add( fix );
                    }
                }
                else if( ProbNo == 3 )
                {
                    double tot_len = 3.0;
                    uint nRB = 3;
                    double div_len = tot_len / nRB;
                    for (uint irb=0; irb <nRB; irb++)
                    {
                        CRigidBody3D rb = new CRigidBody3D();
                        rb.Set_ini_pos_cg_Vector(div_len * (irb + 1), 0, 0);
                        ARB.Add(rb);
                        if ( irb == 0 )
                        {
                            CFix_Hinge fix = new CFix_Hinge(irb);
                            fix.SetIniPosFix(0,0,0);
                            fix.SetAxis(0.0,0.5,1);
                            AFix.Add( fix );
                        }
                        else
                        {
                            CJoint_Spherical fix = new CJoint_Spherical(irb-1, irb);
                            fix.SetIniPosJoint(div_len * (irb + 0.5), 0, 0);
                            AFix.Add( fix );
                        }
                    }
                }
                else if( ProbNo == 4 )
                {
                    CRigidBody3D rb = new CRigidBody3D();
                    rb.Set_ini_pos_cg_Vector(1.0, 0, 0);
                    ARB.Add(rb);
                    CFix_HingeRange fix = new CFix_HingeRange(0);
                    fix.SetIniPosFix(0,0,0);
                    fix.SetAxis(0,1,0);
                    fix.SetRange(-30,60);
                    AFix.Add( fix );
                }
                else if( ProbNo == 5 )
                {
                    uint nRB = 3;
                    // (1.0, 0, 0)
                    // (2.0, 0, 0)
                    // (3.0, 0, 0)
                    for (uint irb = 0; irb < nRB; irb++)
                    {
                        CRigidBody3D rb = new CRigidBody3D();
                        rb.Set_ini_pos_cg_Vector( (irb + 1) ,0,0);
                        ARB.Add(rb);
                    }
                    {
                        CFix_HingeRange fix = new CFix_HingeRange(0);
                        fix.SetIniPosFix(0,0,0);
                        fix.SetAxis(0,1,0);
                        fix.SetRange(-30,60);
                        AFix.Add( fix );
                    }
                    {
                        CJoint_Hinge fix = new CJoint_Hinge(0,1);
                        fix.SetIniPosJoint(1.5,0,0);
                        fix.SetAxis(0,1,0);
                        AFix.Add( fix );
                    }
                    {
                        CJoint_Hinge fix = new CJoint_Hinge(1,2);
                        fix.SetIniPosJoint(2.5,0,0);
                        fix.SetAxis(0,1,0);
                        AFix.Add( fix );
                    }
                }
                else if( ProbNo == 6 )
                {
                    uint nRB = 2;
                    // (1.0, 0, 0)
                    // (2.0, 0, 0)
                    for (uint irb = 0; irb < nRB; irb++)
                    {
                        CRigidBody3D rb = new CRigidBody3D();
                        rb.Set_ini_pos_cg_Vector( (irb + 1) ,0,0);
                        ARB.Add(rb);
                    }
                    {
                        CFix_HingeRange fix = new CFix_HingeRange(0);
                        fix.SetRange(-30,35);
                        //CFix_Hinge fix = new CFix_Hinge(0);
                        fix.SetIniPosFix(0,0,0);
                        fix.SetAxis(0,1,0);
                        AFix.Add( fix );
                    }
                    {
                        CJoint_HingeRange fix = new CJoint_HingeRange(0,1);
                        fix.SetIniPosJoint(1.5,0,0);
                        fix.SetAxis(0,1,0);
                        fix.SetRange(-30,30);
                        AFix.Add( fix );
                    }
                }
                else if( ProbNo == 7 )
                {
                    uint nRB = 4;
                    // (1.0, 0, 0)
                    // (2.0, 0, 0)
                    // (3.0, 0, 0)
                    // (4.0, 0, 0)
                    for (uint irb = 0; irb < nRB; irb++)
                    {
                        CRigidBody3D rb = new CRigidBody3D();
                        rb.Set_ini_pos_cg_Vector( (irb + 1) ,0,0);
                        ARB.Add(rb);
                    }
                    {
                        CFix_HingeRange fix = new CFix_HingeRange(0);
                        fix.SetRange(-30,35);
                        //CFix_Hinge fix = new CFix_Hinge(0);
                        fix.SetIniPosFix(0,0,0);
                        fix.SetAxis(0,1,0);
                        AFix.Add( fix );
                    }
                    {
                        CJoint_HingeRange fix = new CJoint_HingeRange(0,1);
                        fix.SetIniPosJoint(1.5,0,0);
                        fix.SetAxis(0,1,0);
                        fix.SetRange(-30,30);
                        AFix.Add( fix );
                    }
                    {
                        CJoint_HingeRange fix = new CJoint_HingeRange(1,2);
                        fix.SetIniPosJoint(2.5,0,0);
                        fix.SetAxis(0,1,0);
                        fix.SetRange(-30,30);
                        AFix.Add( fix );
                    }
                    {
                        CJoint_HingeRange fix = new CJoint_HingeRange(2,3);
                        fix.SetIniPosJoint(3.5,0,0);
                        fix.SetAxis(0,1,0);
                        fix.SetRange(-30,30);
                        AFix.Add( fix );
                    }
                }
                else if( ProbNo == 8 )
                {
                    CRigidBody3D rb = new CRigidBody3D();
                    // rb.ini_pos_cg等は変更したらセットする必要があります。
                    rb.Set_ini_pos_cg_Vector(0.3,0.0,1.0);
                    rb.Set_Omega_Vector(0.0, 0.0, 1.0); // rb.Omega.z = 1.0;
                    // rb.mineatiaはDoubleArrayIndexerなので配列要素に代入できます。
                    rb.mineatia[2] = 10.0;
                    rb.mass = 0.001;
                    ARB.Add(rb);
                    CFix_Spherical fix = new CFix_Spherical(0);
                    fix.SetIniPosFix(0,0,0);
                    AFix.Add( fix );
                }
                success = true;
            }
            catch (Exception exception)
            {
                Console.WriteLine(exception.Message + " " + exception.StackTrace);
            }

            /*
            Gl.glMatrixMode(Gl.GL_PROJECTION);
            Gl.glLoadIdentity();
            DelFEM4NetCom.View.DrawerGlUtility.SetProjectionTransform(Camera);
            //Glut.glutPostRedisplay();
            */
            ProbNo++;
            if (ProbNo == ProbCnt) ProbNo = 0;
            return success;
        }
コード例 #2
0
ファイル: MainLogic.cs プロジェクト: ryujimiya/delfem4net
 /// <summary>
 /// 剛体を描画する
 /// </summary>
 /// <param name="r"></param>
 private static void DrawRigidBody(CRigidBody3D r)
 {
     uint imode = 1;
     if ( imode == 0 )
     {
     }
     else if ( imode == 1 )
     {
         Gl.glPushMatrix();
         Gl.glTranslated(
             r.ini_pos_cg.x + r.disp_cg.x,
             r.ini_pos_cg.y + r.disp_cg.y,
             r.ini_pos_cg.z + r.disp_cg.z );
         {
             double[] rot0 = new double[16];
             r.GetInvRotMatrix44(ref rot0);
             Gl.glMultMatrixd(rot0);
         }
         Gl.glColor3d(0,0,0);
         Glut.glutSolidCube(0.2);
         //Glut.glutSolidTeapot(1.0);
         //Glut.glutWireTeapot(0.2);
         //Glut.glutWireOctahederon();
         //Glut.glutWireDodecahedron();
         Gl.glLineWidth(1);
         Gl.glBegin(Gl.GL_LINES);
         Gl.glColor3d(1,0,0);
         Gl.glVertex3d(0,0,0);
         Gl.glVertex3d(0.4,0,0);
         Gl.glColor3d(0,1,0);
         Gl.glVertex3d(0,0,0);
         Gl.glVertex3d(0,0.4,0);
         Gl.glColor3d(0,0,1);
         Gl.glVertex3d(0,0,0);
         Gl.glVertex3d(0,0,0.4);
         Gl.glEnd();
         Gl.glPopMatrix();
     }
 }