Beispiel #1
0
        //将每个方格的中心点向量化
        public vector[,] brightness(double[,] ElementData, int cellsize, int RowsNum, int ColsNum)
        {
            point[]    pointa = null;
            triangle[] tri    = new triangle[2];
            triangle[] tri1   = new triangle[4];
            triangle[] tri2   = new triangle[8];
            vector[,] vec = new vector[RowsNum, ColsNum];
            //当遍历时有九种可能
            //左下角的向量计算
            pointa = new point[4];
            int n = 0;

            for (int i = 0; i < 2; i++)
            {
                for (int j = 0; j < 2; j++)
                {
                    pointa[n].x = 1 / 2 * cellsize + i * cellsize;
                    pointa[n].y = 1 / 2 * cellsize + j * cellsize;
                    pointa[n].z = ElementData[i, j];
                    n++;
                }
            }

            tri[0].P1   = pointa[0]; tri[0].P2 = pointa[3]; tri[0].P3 = pointa[1];
            tri[1].P1   = pointa[0]; tri[1].P2 = pointa[2]; tri[1].P3 = pointa[3];
            vec[0, 0].X = jiaodian(tri).X;
            vec[0, 0].Y = jiaodian(tri).Y;
            vec[0, 0].Z = jiaodian(tri).Z;
            //左上角的向量计算
            n = 0;
            for (int i = 0; i < 2; i++)
            {
                for (int j = RowsNum - 1; j > RowsNum - 3; j--)
                {
                    pointa[n].x = 1 / 2 * cellsize + i * cellsize;
                    pointa[n].y = 1 / 2 * cellsize + j * cellsize;
                    pointa[n].z = ElementData[i, j];
                    n++;
                }
            }
            tri[0].P1             = pointa[0]; tri[0].P2 = pointa[1]; tri[0].P3 = pointa[3];
            tri[1].P1             = pointa[0]; tri[1].P2 = pointa[3]; tri[1].P3 = pointa[2];
            vec[0, ColsNum - 1].X = jiaodian(tri).X;
            vec[0, ColsNum - 1].Y = jiaodian(tri).Y;
            vec[0, ColsNum - 1].Z = jiaodian(tri).Z;
            //右上角的向量计算
            n = 0;
            for (int i = RowsNum - 1; i > RowsNum - 3; i--)
            {
                for (int j = RowsNum - 1; j > RowsNum - 3; j--)
                {
                    pointa[n].x = 1 / 2 * cellsize + i * cellsize;
                    pointa[n].y = 1 / 2 * cellsize + j * cellsize;
                    pointa[n].z = ElementData[i, j];
                    n++;
                }
            }
            tri[0].P1 = pointa[0]; tri[0].P2 = pointa[1]; tri[0].P3 = pointa[3];
            tri[1].P1 = pointa[0]; tri[1].P2 = pointa[3]; tri[1].P3 = pointa[2];
            vec[RowsNum - 1, ColsNum - 1].X = jiaodian(tri).X;
            vec[RowsNum - 1, ColsNum - 1].Y = jiaodian(tri).Y;
            vec[RowsNum - 1, ColsNum - 1].Z = jiaodian(tri).Z;
            //右下角的向量计算
            n = 0;
            for (int i = RowsNum - 1; i > RowsNum - 3; i--)
            {
                for (int j = 0; j < 2; j++)
                {
                    pointa[n].x = 1 / 2 * cellsize + i * cellsize;
                    pointa[n].y = 1 / 2 * cellsize + j * cellsize;
                    pointa[n].z = ElementData[i, j];
                    n++;
                }
            }
            tri[0].P1             = pointa[0]; tri[0].P2 = pointa[3]; tri[0].P3 = pointa[1];
            tri[1].P1             = pointa[0]; tri[1].P2 = pointa[2]; tri[1].P3 = pointa[3];
            vec[RowsNum - 1, 0].X = jiaodian(tri).X;
            vec[RowsNum - 1, 0].Y = jiaodian(tri).Y;
            vec[RowsNum - 1, 0].Z = jiaodian(tri).Z;
            //y为0的一横行点
            pointa = new point[6];
            for (int i = 1; i < RowsNum - 1; i++)
            {
                int m = 0;
                for (int j = 0; j < 2; j++)
                {
                    pointa[j + m].x     = 1 / 2 * cellsize + i - 1 * cellsize;
                    pointa[j + m].y     = 1 / 2 * cellsize + j * cellsize;
                    pointa[j + m].z     = ElementData[i - 1, j];
                    pointa[j + 1 + m].x = 1 / 2 * cellsize + i * cellsize;
                    pointa[j + 1 + m].y = 1 / 2 * cellsize + j * cellsize;
                    pointa[j + 1 + m].z = ElementData[i, j];
                    pointa[j + 2 + m].x = 1 / 2 * cellsize + i + 1 * cellsize;
                    pointa[j + 2 + m].y = 1 / 2 * cellsize + j * cellsize;
                    pointa[j + 2 + m].z = ElementData[i + 1, j];
                    m = 2;
                }
                tri1[0].P1  = pointa[1]; tri1[0].P2 = pointa[0]; tri1[0].P3 = pointa[3];
                tri1[1].P1  = pointa[1]; tri1[1].P2 = pointa[3]; tri1[1].P3 = pointa[4];
                tri1[2].P1  = pointa[1]; tri1[2].P2 = pointa[4]; tri1[2].P3 = pointa[5];
                tri1[3].P1  = pointa[1]; tri1[3].P2 = pointa[5]; tri1[3].P3 = pointa[2];
                vec[i, 0].X = hang(tri1).X;
                vec[i, 0].Y = hang(tri1).Y;
                vec[i, 0].Z = hang(tri1).Z;
            }
            //最上面一行
            for (int i = 1; i < RowsNum - 1; i++)
            {
                int m = 0;
                for (int j = 0; j < 2; j++)
                {
                    pointa[j + m].x     = 1 / 2 * cellsize + i - 1 * cellsize;
                    pointa[j + m].y     = 1 / 2 * cellsize + (j - m + ColsNum - 1) * cellsize;
                    pointa[j + m].z     = ElementData[i - 1, j];
                    pointa[j + 1 + m].x = 1 / 2 * cellsize + i * cellsize;
                    pointa[j + 1 + m].y = 1 / 2 * cellsize + (j - m + ColsNum - 1) * cellsize;
                    pointa[j + 1 + m].z = ElementData[i, j];
                    pointa[j + 2 + m].x = 1 / 2 * cellsize + i + 1 * cellsize;
                    pointa[j + 2 + m].y = 1 / 2 * cellsize + (j - m + ColsNum - 1) * cellsize;
                    pointa[j + 2 + m].z = ElementData[i + 1, (j - m + ColsNum - 1)];
                    m = 2;
                }
                tri1[0].P1            = pointa[1]; tri1[0].P2 = pointa[3]; tri1[0].P3 = pointa[0];
                tri1[1].P1            = pointa[1]; tri1[1].P2 = pointa[4]; tri1[1].P3 = pointa[3];
                tri1[2].P1            = pointa[1]; tri1[2].P2 = pointa[5]; tri1[2].P3 = pointa[4];
                tri1[3].P1            = pointa[1]; tri1[3].P2 = pointa[2]; tri1[3].P3 = pointa[5];
                vec[i, ColsNum - 1].X = hang(tri1).X;
                vec[i, ColsNum - 1].Y = hang(tri1).Y;
                vec[i, ColsNum - 1].Z = hang(tri1).Z;
            }
            //左侧一行
            for (int j = 1; j < ColsNum - 1; j++)
            {
                int m = 0;
                for (int i = 0; i < 2; i++)
                {
                    pointa[i + m].x     = 1 / 2 * cellsize + j - 1 * cellsize;
                    pointa[i + m].y     = 1 / 2 * cellsize + i * cellsize;
                    pointa[i + m].z     = ElementData[j - 1, i];
                    pointa[i + 1 + m].x = 1 / 2 * cellsize + j * cellsize;
                    pointa[i + 1 + m].y = 1 / 2 * cellsize + i * cellsize;
                    pointa[i + 1 + m].z = ElementData[j, i];
                    pointa[i + 2 + m].x = 1 / 2 * cellsize + j + 1 * cellsize;
                    pointa[i + 2 + m].y = 1 / 2 * cellsize + i * cellsize;
                    pointa[i + 2 + m].z = ElementData[j + 1, i];
                    m = 2;
                }
                tri1[0].P1  = pointa[1]; tri1[0].P2 = pointa[2]; tri1[0].P3 = pointa[5];
                tri1[1].P1  = pointa[1]; tri1[1].P2 = pointa[5]; tri1[1].P3 = pointa[4];
                tri1[2].P1  = pointa[1]; tri1[2].P2 = pointa[4]; tri1[2].P3 = pointa[3];
                tri1[3].P1  = pointa[1]; tri1[3].P2 = pointa[3]; tri1[3].P3 = pointa[0];
                vec[0, j].X = hang(tri1).X;
                vec[0, j].Y = hang(tri1).Y;
                vec[0, j].Z = hang(tri1).Z;
            }
            //右边一行
            for (int j = 1; j < ColsNum - 1; j++)
            {
                int m = 0;
                for (int i = 0; i < 2; i++)
                {
                    pointa[i + m].x     = 1 / 2 * cellsize + j - 1 * cellsize;
                    pointa[i + m].y     = 1 / 2 * cellsize + (i - m + ColsNum - 1) * cellsize;
                    pointa[i + m].z     = ElementData[j - 1, i];
                    pointa[i + 1 + m].x = 1 / 2 * cellsize + j * cellsize;
                    pointa[i + 1 + m].y = 1 / 2 * cellsize + (i - m + ColsNum - 1) * cellsize;
                    pointa[i + 1 + m].z = ElementData[j, i];
                    pointa[i + 2 + m].x = 1 / 2 * cellsize + j + 1 * cellsize;
                    pointa[i + 2 + m].y = 1 / 2 * cellsize + (i - m + ColsNum - 1) * cellsize;
                    pointa[i + 2 + m].z = ElementData[i + 1, (i - m + ColsNum - 1)];
                    m = 2;
                }
                tri1[0].P1            = pointa[1]; tri1[0].P2 = pointa[5]; tri1[0].P3 = pointa[2];
                tri1[1].P1            = pointa[1]; tri1[1].P2 = pointa[4]; tri1[1].P3 = pointa[5];
                tri1[2].P1            = pointa[1]; tri1[2].P2 = pointa[3]; tri1[2].P3 = pointa[4];
                tri1[3].P1            = pointa[1]; tri1[3].P2 = pointa[0]; tri1[3].P3 = pointa[3];
                vec[RowsNum - 1, j].X = hang(tri1).X;
                vec[RowsNum - 1, j].Y = hang(tri1).Y;
                vec[RowsNum - 1, j].Z = hang(tri1).Z;
            }
            //普通点
            pointa = new point[9];
            for (int i = 1; i < RowsNum - 1; i++)
            {
                for (int j = 1; j < ColsNum - 1; j++)
                {
                    int q = 0;
                    pointa[q].x = 1 / 2 * cellsize + i - 1 * cellsize;
                    pointa[q].y = 1 / 2 * cellsize + j - 1 * cellsize;
                    pointa[q].z = ElementData[i - 1, j - 1];

                    pointa[q + 1].x = 1 / 2 * cellsize + i - 1 * cellsize;
                    pointa[q + 1].y = 1 / 2 * cellsize + j * cellsize;
                    pointa[q + 1].z = ElementData[i - 1, j];

                    pointa[q + 2].x = 1 / 2 * cellsize + i - 1 * cellsize;
                    pointa[q + 2].y = 1 / 2 * cellsize + j + 1 * cellsize;
                    pointa[q + 2].z = ElementData[i - 1, j + 1];

                    pointa[q + 3].x = 1 / 2 * cellsize + i * cellsize;
                    pointa[q + 3].y = 1 / 2 * cellsize + j - 1 * cellsize;
                    pointa[q + 3].z = ElementData[i, j - 1];

                    pointa[q + 4].x = 1 / 2 * cellsize + i * cellsize;
                    pointa[q + 4].y = 1 / 2 * cellsize + j * cellsize;
                    pointa[q + 4].z = ElementData[i, j];

                    pointa[q + 5].x = 1 / 2 * cellsize + i * cellsize;
                    pointa[q + 5].y = 1 / 2 * cellsize + j + 1 * cellsize;
                    pointa[q + 5].z = ElementData[i, j + 1];

                    pointa[q + 6].x = 1 / 2 * cellsize + i + 1 * cellsize;
                    pointa[q + 6].y = 1 / 2 * cellsize + j - 1 * cellsize;
                    pointa[q + 6].z = ElementData[i + 1, j - 1];

                    pointa[q + 7].x = 1 / 2 * cellsize + i + 1 * cellsize;
                    pointa[q + 7].y = 1 / 2 * cellsize + j * cellsize;
                    pointa[q + 7].z = ElementData[i + 1, j];

                    pointa[q + 8].x = 1 / 2 * cellsize + i + 1 * cellsize;
                    pointa[q + 8].y = 1 / 2 * cellsize + j + 1 * cellsize;
                    pointa[q + 8].z = ElementData[i + 1, j + 1];
                    tri2[0].P1      = pointa[4]; tri2[0].P2 = pointa[0]; tri2[0].P3 = pointa[1];
                    tri2[1].P1      = pointa[4]; tri2[1].P2 = pointa[1]; tri2[1].P3 = pointa[2];
                    tri2[2].P1      = pointa[4]; tri2[2].P2 = pointa[2]; tri2[2].P3 = pointa[5];
                    tri2[3].P1      = pointa[4]; tri2[3].P2 = pointa[5]; tri2[3].P3 = pointa[8];
                    tri2[4].P1      = pointa[4]; tri2[4].P2 = pointa[8]; tri2[4].P3 = pointa[7];
                    tri2[5].P1      = pointa[4]; tri2[5].P2 = pointa[7]; tri2[5].P3 = pointa[6];
                    tri2[6].P1      = pointa[4]; tri2[6].P2 = pointa[6]; tri2[6].P3 = pointa[3];
                    tri2[7].P1      = pointa[4]; tri2[7].P2 = pointa[3]; tri2[7].P3 = pointa[0];

                    vec[i, j].X = putong(tri2).X;
                    vec[i, j].Y = putong(tri2).Y;
                    vec[i, j].Z = putong(tri2).Z;
                }
            }
            return(vec);
        }
Beispiel #2
0
 //计算全部的角度
 public double[,] d_raytovector_angle_all(vector[,] vec, int RowsNum, int ColsNum, vector vectorvalue)
 {
     double[,] d_Raytovector_Angle_All = new double[RowsNum, ColsNum];
     for (int i = 0; i < RowsNum; i++)
     {
         for (int j = 0; j < ColsNum; j++)
         {
             d_Raytovector_Angle_All[i, j] = d_raytovector_angle(vectorvalue, vec[i, j]);
         }
     }
     return(d_Raytovector_Angle_All);
 }