1. <s id="4jtld"></s>
    1. <span id="4jtld"><meter id="4jtld"></meter></span>

        <span id="4jtld"></span>
      1. <s id="4jtld"><noscript id="4jtld"><i id="4jtld"></i></noscript></s>
        溫馨提示×

        怎么利用C#實現繪制出地球旋轉效果

        發布時間:2023-02-28 17:38:17 來源:億速云 閱讀:88 作者:iii 欄目:開發技術

        這篇文章主要介紹“怎么利用C#實現繪制出地球旋轉效果”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“怎么利用C#實現繪制出地球旋轉效果”文章能幫助大家解決問題。

        將方形的圖像映射到正方形上似乎并沒有什么難度,所以接下來要做的是把圖像映射到球面上。

        而球的參數方程為

        x=rcos?cos&theta;

        y=rcos?sin&theta;

        z=rsin?

        由于r的值是恒定的,所以生成球的關鍵參數就是&theta;, &phi;而把地圖貼在球上就相當于把圖像坐標(x,y)映射到坐標&theta;,&phi;上。

        其中地圖為

        怎么利用C#實現繪制出地球旋轉效果

        private MeshGeometry3D SetEarth(int numx, int numz, double r=3)
        {
            MeshGeometry3D mesh = new MeshGeometry3D();
        
            double dTh = 2 * Math.PI / numx;
            double dPhi = Math.PI / numz;
        
            double X(double th, double phi) => r * Math.Sin(phi) * Math.Cos(th);
            double Y(double th, double phi) => r * Math.Sin(phi) * Math.Sin(th);
            double Z(double phi) => r * Math.Cos(phi);
        
            // Make the points.
            for (int i = 0; i <= numx; i++)
                for (int j = 0; j <= numz; j++)
                {
                    var th = i * dTh;
                    var phi = j * dPhi;
                    mesh.Positions.Add(new Point3D(X(th, phi), Y(th, phi), Z(phi)));
                    mesh.TextureCoordinates.Add(new Point(th, phi));
                }
        
            // 生成三角形
            for (int i = 0; i < numx; i++)
                for (int j = 0; j < numz; j++)
                {
                    int i1 = i * (numz + 1) + j;
                    int i2 = i1 + 1;
                    int i3 = i2 + (numz + 1);
                    int i4 = i3 - 1;
                    mesh.TriangleIndices.Add(i1);
                    mesh.TriangleIndices.Add(i2);
                    mesh.TriangleIndices.Add(i3);
        
                    mesh.TriangleIndices.Add(i1);
                    mesh.TriangleIndices.Add(i3);
                    mesh.TriangleIndices.Add(i4);
                }
            return mesh;
        }

        生成的地球為

        怎么利用C#實現繪制出地球旋轉效果

        如果生成之后地球躺平了,可以調整一下LookDirection。

        如果僅僅是這樣,那顯然是不行的,因為只看到一個二維的圓形,無法讓人覺得這是個地球,接下來就要讓這個球轉起來。

        方法是新建一個Timer,

        public MainWindow()
        {
            InitializeComponent();
            initialize3D();
            timer.Interval = TimeSpan.FromMilliseconds(5);
            timer.Tick += Timer_Tick;
            timer.Start();
        }

        然后隨著時間而旋轉

        double thAngle = 0;
        private void Timer_Tick(object? sender, EventArgs e)
        {
            thAngle = thAngle > Math.PI ? 0 : thAngle + 0.1;
            Rotation3D rotation = new AxisAngleRotation3D(new Vector3D(0,0,1), thAngle);
            var rot = new RotateTransform3D(rotation, new Point3D(0,0,0));
            Point3D[] pts = mesh.Positions.ToArray();
            rot.Transform(pts);
            mesh.Positions = new Point3DCollection(pts);
        }

        結果為

        怎么利用C#實現繪制出地球旋轉效果

        關于“怎么利用C#實現繪制出地球旋轉效果”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

        免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

        主題地圖

        欧美午夜理伦三级在线观看,欧美午夜乱伦片,欧美午夜乱色视频在线观看,欧美午夜免费一区二区,欧美午夜片欧美片在线观看