簡體   English   中英

使用繪制LIB代表3D對象asp.net C#

[英]representing 3d objects asp.net c# using a drawing lib

我目前正在研究3D裝箱問題,我想將其結果表示為圖像。

我將結果存儲為包裝對象列表,如下所示

public class LoadedPackage
{
     private PackingObject packingObject;
     private int xloc, yloc, zloc;
     private bool flipped = false;
}

public class PackingObject
{
     private int ID, checkerMaster, height, width, depth, number;
}

我想使用xloc,yloc,zloc和尺寸來一次繪制包裝1來構建圖像。 是否有某種圖像庫方法可以做到這一點,或者我將不得不使用openGL解決方案,對於一個簡單的圖像,這對我來說似乎有點過大了。

我正在考慮也許使用使用二維gdi lib的等距方法

最后,我選擇了等距方法,並向每個包中添加了一種方法,以將自身從3d坐標轉換為等距。 我希望以下代碼可以幫助處於類似困境的其他人!

等距立方體有6個點,因此我返回了6個點的數組。 實際上,我使用3個子方法來返回3個等距多邊形,以供GDI庫處理,但是為了得到這個答案,我將僅發布更通用的6點方法。

    public PointF[] convertCoords()
    {
        float x;
        float y;
        PointF p;
        PointF[] pointFs = new PointF[7];
        int x1 = 0;
        int y1 = 0;
        int z1 = 0;

        double rads = Helpers.DegreeToRadian(30);

        //point 0 in iso
        x = ((float)Math.Cos(rads) * xloc) + ((float)Math.Cos(rads) * yloc);
        y = ((float)Math.Sin(rads) * yloc) + zloc - ((float)Math.Sin(rads) * xloc);
        y = (-y) + 250;

        p = new PointF(x,y);
        pointFs[0] = new PointF(p.X,p.Y);
        //point 1 in iso
        x1 = xloc + packingObject.Depth;
        y1 = yloc;
        z1 = zloc;

        x = ((float)Math.Cos(rads) * x1) + ((float)Math.Cos(rads) * y1);
        y = ((float)Math.Sin(rads) * y1) + z1 - ((float)Math.Sin(rads) * x1);
        y = (-y) + 250;

        p = new PointF(x, y);
        pointFs[1] = new PointF(p.X, p.Y);
        //point 2 in iso
        x1 = xloc + packingObject.Depth;
        y1 = yloc;
        z1 = zloc + packingObject.Height;

        x = ((float)Math.Cos(rads) * x1) + ((float)Math.Cos(rads) * y1);
        y = (-((float)Math.Sin(rads) * x1)) + ((float)Math.Sin(rads) * y1) + z1;
        y = (-y) + 250;

        p = new PointF(x, y);
        pointFs[2] = new PointF(p.X, p.Y);
        //point 3 in iso
        x1 = xloc;
        y1 = yloc;
        z1 = zloc + packingObject.Height;

        x = ((float)Math.Cos(rads) * x1) + ((float)Math.Cos(rads) * y1);
        y = (-((float)Math.Sin(rads) * x1)) + ((float)Math.Sin(rads) * y1) + z1;
        y = (-y) + 250;

        p = new PointF(x, y);
        pointFs[3] = new PointF(p.X, p.Y);
        //point 4 in iso
        x1 = xloc;
        y1 = yloc + packingObject.Width;
        z1 = zloc + packingObject.Height;

        x = ((float)Math.Cos(rads) * x1) + ((float)Math.Cos(rads) * y1);
        y = (-((float)Math.Sin(rads) * x1)) + ((float)Math.Sin(rads) * y1) + z1;
        y = (-y) + 250;

        p = new PointF(x, y);
        pointFs[4] = new PointF(p.X, p.Y);
        //point 5 in iso
        x1 = xloc + packingObject.Depth;
        y1 = yloc + packingObject.Width;
        z1 = zloc + packingObject.Height;

        x = ((float)Math.Cos(rads) * x1) + ((float)Math.Cos(rads) * y1);
        y = (-((float)Math.Sin(rads) * x1)) + ((float)Math.Sin(rads) * y1) + z1;
        y = (-y) + 250;

        p = new PointF(x, y);
        pointFs[5] = new PointF(p.X, p.Y);
        //point 6 in iso
        x1 = xloc + packingObject.Depth;
        y1 = yloc + packingObject.Width;
        z1 = zloc;

        x = ((float)Math.Cos(rads) * x1) + ((float)Math.Cos(rads) * y1);
        y = (-((float)Math.Sin(rads) * x1)) + ((float)Math.Sin(rads) * y1) + z1;
        y = (-y) + 250;

        p = new PointF(x, y);
        pointFs[6] = new PointF(p.X, p.Y);

        return pointFs;
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM