Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 创建随机(甘特图)图表_C#_Algorithm - Fatal编程技术网

C# 创建随机(甘特图)图表

C# 创建随机(甘特图)图表,c#,algorithm,C#,Algorithm,我正试图为我的一个音频程序编写一个测试,但我的大脑在测试设置上遇到了问题。首先,我有一个60行乘10000列的表需要填充。每个单元格都有一个“开”、“关”或“左”值(表示我的值与我左边最近的“开/关”值相同)。我希望在任何给定的时间都能随机播放20到40行。每一个都必须随机打开6到200个单元格。要设置ON或OFF的命令必须按行然后按列排序。我正在描绘一个带有坐标键和开/关值的稀疏字典。我不明白的是如何存储开/关单元格,以便轻松确定当前行是开还是关。帮忙?谢谢你的时间。经过进一步思考,我意识到我

我正试图为我的一个音频程序编写一个测试,但我的大脑在测试设置上遇到了问题。首先,我有一个60行乘10000列的表需要填充。每个单元格都有一个“开”、“关”或“左”值(表示我的值与我左边最近的“开/关”值相同)。我希望在任何给定的时间都能随机播放20到40行。每一个都必须随机打开6到200个单元格。要设置ON或OFF的命令必须按行然后按列排序。我正在描绘一个带有坐标键和开/关值的稀疏字典。我不明白的是如何存储开/关单元格,以便轻松确定当前行是开还是关。帮忙?谢谢你的时间。

经过进一步思考,我意识到我可以在两次通过后完成。这就是我的结局。请随意评论此方法:

        var table = new byte[60, 10000];
        for(int i = 0; i < 60; i++)
        {
            // we want at least half the row to be blank
            int j = 0;
            while(j < 10000)
            {
                var width = rand.Next(7, 200);
                j += width * 2;
                var vol = (byte)rand.Next(50, 125);
                for(int k = j - width; k < Math.Min(10000, j); k++)
                    table[i, k] = vol;
            }
        }

        var midiEvents = new List<BASS_MIDI_EVENT>();
        midiEvents.Add(new BASS_MIDI_EVENT(BASSMIDIEvent.MIDI_EVENT_PROGRAM, 0, 0, 0, 0));

        for(int j = 0; j < 10000; j++)
        {
            for(int i = 0; i < 60; i++)
            {
                var cur = (int)table[i, j];
                var left = j > 0 ? table[i, j - 1] : 0;
                if(cur > 0 && left == 0)
                {
                    cur <<= 8;
                    cur |= i + 33;
                    midiEvents.Add(new BASS_MIDI_EVENT(BASSMIDIEvent.MIDI_EVENT_NOTE, cur, 0, j, 0));
                }
                else if(cur == 0 && left > 0)
                {
                    midiEvents.Add(new BASS_MIDI_EVENT(BASSMIDIEvent.MIDI_EVENT_NOTE, i + 33, 0, j, 0));
                }
            }
        }
var table=新字节[60,10000];
对于(int i=0;i<60;i++)
{
//我们希望至少有一半的行是空白的
int j=0;
而(j<10000)
{
var width=rand.Next(7200);
j+=宽度*2;
var vol=(字节)rand.Next(50125);
对于(int k=j-width;k0?表[i,j-1]:0;
如果(cur>0&&left==0)
{
cur