C# 用C语言绘制特定对角线#

C# 用C语言绘制特定对角线#,c#,winforms,C#,Winforms,我试图通过使用PictureBox图形来引导和绘制特定的线 以下是我的愿景: 以下是我迄今为止所做的尝试: //int nx = 9, ny = 9; float dx = (float)PictureBox.Width / 8; float dy = (float)PictureBox.Height / 5; int x1 = 0; int y1 = 1; int x2 = 1; int y2 = 0; //Pen Paint Stlye PenBlack.DashStyle = Sys

我试图通过使用PictureBox图形来引导和绘制特定的线

以下是我的愿景:

以下是我迄今为止所做的尝试:

//int nx = 9, ny = 9;
float dx = (float)PictureBox.Width / 8;
float dy = (float)PictureBox.Height / 5;

int x1 = 0;
int y1 = 1;
int x2 = 1;
int y2 = 0;

//Pen Paint Stlye
PenBlack.DashStyle = System.Drawing.Drawing2D.DashStyle.Solid;

//0 < (9 + 9)
while (y1 < (9 + 9))
{
    g.DrawLine(PenBlack, x1 * dx, y1 * dy, x2 * dx, y2 * dy);
    y1++;
    x2++;
}
//int nx=9,ny=9;
float dx=(float)PictureBox.Width/8;
float dy=(float)PictureBox.Height/5;
int-x1=0;
int y1=1;
int x2=1;
int y2=0;
//钢笔画
PenBlack.DashStyle=System.Drawing.Drawing2D.DashStyle.Solid;
//0 < (9 + 9)
而(y1<(9+9))
{
g、 抽绳(黑色,x1*dx,y1*dy,x2*dx,y2*dy);
y1++;
x2++;
}
但从中我得到了:

基本上,我希望它是准确的,甚至在改变图片盒大小时也是如此。

试试:

float dx = (float)PictureBox.Width / 9.0f;
float dy = (float)PictureBox.Height / 4.5f;
因为你有9x9的正方形,想要1x2的正方形坡度。。。所以
dx=xs/(9/1)
dy=ys/(9/2)
试试:

float dx = (float)PictureBox.Width / 9.0f;
float dy = (float)PictureBox.Height / 4.5f;
因为你有9x9的正方形,想要1x2的正方形坡度。。。因此
dx=xs/(9/1)
dy=ys/(9/2)

只是网格错误。 我添加了两个全局变量:

int nx = 12, ny = 10;
NX是X轴上有多少个正方形

NY是Y轴上有多少个正方形

基本上,这与我的网格代码是一致的:

 //Divide WIDTH x Axis int 3 columns
        int x1 = TAPBxCanvas.Width / 2;

        //Divide HEIGHT y Axis into 3 rows;
        int y1 = TAPBxCanvas.Height / 2;

        //Find the Second point


        Point width = new Point(x1,y1);

        // - - -

        float dx = (float)TAPBxCanvas.Width / nx;
        float dy = (float)TAPBxCanvas.Height / ny;
        PenGray.DashStyle = System.Drawing.Drawing2D.DashStyle.Solid;

        for (int ix = 0; ix <= nx; ix++)
        {
            g.DrawLine(PenGray, ix * dx, 0, ix * dx, TAPBxCanvas.Height);
        }

        for (int iy = 0; iy <= ny; iy++)
        {
            g.DrawLine(PenGray, 0, iy * dy, TAPBxCanvas.Width, iy * dy);
        }
并将高度除以DnY的结果:

float dy = (float)TAPBxCanvas.Height / DnY);
其他一切都保持不变,我得到了:

只是网格错误。 我添加了两个全局变量:

int nx = 12, ny = 10;
NX是X轴上有多少个正方形

NY是Y轴上有多少个正方形

基本上,这与我的网格代码是一致的:

 //Divide WIDTH x Axis int 3 columns
        int x1 = TAPBxCanvas.Width / 2;

        //Divide HEIGHT y Axis into 3 rows;
        int y1 = TAPBxCanvas.Height / 2;

        //Find the Second point


        Point width = new Point(x1,y1);

        // - - -

        float dx = (float)TAPBxCanvas.Width / nx;
        float dy = (float)TAPBxCanvas.Height / ny;
        PenGray.DashStyle = System.Drawing.Drawing2D.DashStyle.Solid;

        for (int ix = 0; ix <= nx; ix++)
        {
            g.DrawLine(PenGray, ix * dx, 0, ix * dx, TAPBxCanvas.Height);
        }

        for (int iy = 0; iy <= ny; iy++)
        {
            g.DrawLine(PenGray, 0, iy * dy, TAPBxCanvas.Width, iy * dy);
        }
并将高度除以DnY的结果:

float dy = (float)TAPBxCanvas.Height / DnY);
其他一切都保持不变,我得到了:


你能澄清一下吗?“我希望它是准确的”是什么意思?两个屏幕截图看起来非常相似。如果你看第二个,对角线不会像第一个一样精确地对齐到正方形的角落。@Charleh在第二个图片中,对角线的末端不接触网格交点,但在第一个图片中是这样的。需要更多的细节:图片框的大小是否固定?网格正方形的数量是参数化的还是固定的?网格正方形实际上是正方形吗?如果你数你的线,你有8条。你试过把它设为9吗?如果这是可行的,那么它只是一个简单的例子,确保您将网格细分为与您的线条绘制算法相同的位数。如果你想一想,你想画一条对角线,在每一个正方形的右上角(忽略垂直度),所以你肯定需要和正方形一样多的线,你能澄清吗?“我希望它是准确的”是什么意思?两个屏幕截图看起来非常相似。如果你看第二个,对角线不会像第一个一样精确地对齐到正方形的角落。@Charleh在第二个图片中,对角线的末端不接触网格交点,但在第一个图片中是这样的。需要更多的细节:图片框的大小是否固定?网格正方形的数量是参数化的还是固定的?网格正方形实际上是正方形吗?如果你数你的线,你有8条。你试过把它设为9吗?如果这是可行的,那么它只是一个简单的例子,确保您将网格细分为与您的线条绘制算法相同的位数。如果你仔细想想,你想画一条对角线,它接触到每个正方形的右上角(忽略垂直度)当然你需要尽可能多的线,因为有正方形,我明白,但当我插入它时,我没有得到我想要的结果,而是这样:经过一点修补,我发现不是对角线错了,而是它们后面的网格错了,所以我把它修好了。谢谢你的帮助,我明白了,但是当我插入它的时候,我没有得到我想要的结果,而是这样:经过一点小修补,我发现错的不是对角线而是它们后面的网格,所以我把它修好了。谢谢你的帮助