Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.84/75: Рейтинг темы: голосов - 75, средняя оценка - 4.84
0 / 0 / 0
Регистрация: 14.01.2016
Сообщений: 28

DrawLines рисование линий по точкам из массива

06.06.2018, 14:02. Показов 15964. Ответов 10

Студворк — интернет-сервис помощи студентам
имеется два массива []X и Y[], в них хранятся координаты по которым нужно рисовать линии, но выдается ошибка "Недопустимый параметр"

метод который рисует
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
            public void Draw(Graphics graphics)
            {
                Pen p = new Pen(Color.Red, 3);
                for (int i = 0; i < x.Length; i++) {
                    for (int j = 0; j < y.Length; j++)
                    {
                        Point[] point =
                        {
                    new Point(x[i],y[j])
                    
                    };
                        graphics.DrawLines(p, point);
                    }                 
                }              
            }
скриншот приложил
Миниатюры
DrawLines рисование линий по точкам из массива  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.06.2018, 14:02
Ответы с готовыми решениями:

Рисование линий по точкам массива
Есть двумерный массив, Point mas2 = new Point; который заполняется динамически. Этот массив содержит координаты точек. По этим точкам...

Рисование DrawLines
Мне надо соединить 2 точки из массива. Как это сделать? Вот мой пример, но получается перегруз аргументов Pen pen = new...

Создание массива и рисование линий
Здравствуйте. Подскажите пожалуйста как решить эту задачу. 1. Через textBox ввести два числа, допустим - шаг линий и количество...

10
0 / 0 / 0
Регистрация: 14.01.2016
Сообщений: 28
06.06.2018, 14:58  [ТС]
вот видимо здесь есть ошибка, но как исправить
Миниатюры
DrawLines рисование линий по точкам из массива  
0
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
06.06.2018, 15:23
Метод DrawLines принимает на вход массив точек, которые являются вершинами ломаной. Ты же координаты берёшь из разных массивов, значит тебе нужен метод DrawLine в цикле
0
0 / 0 / 0
Регистрация: 14.01.2016
Сообщений: 28
06.06.2018, 15:41  [ТС]
у меня массив Х это все координаты .X, с игреком тоже самое, просто массивы разные, все равно использовать DrawLine, я уже запутался Как я еще понял у меня в этот массив только одни точки добавляются, а для построения прямой 2 надо
0
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
06.06.2018, 16:02
Зачем вообще хранить координаты в разных массивах? Сделай один массив типа Point
0
315 / 244 / 149
Регистрация: 03.10.2017
Сообщений: 886
Записей в блоге: 1
06.06.2018, 16:18
Мне вот интересно. По какому признаку хранятся координаты?
1 и 2 элемент массива это одна линия, а 3 и 4 это вторая или 1 и 2 это одна, а 2 и 3 это уже вторая

Добавлено через 7 минут
C#
1
2
3
4
5
6
7
8
public void Draw(Graphics graphics)
        {
            Pen p = new Pen(Color.Red, 3);
            for (int i = 0; i < x.Length-1; i+=2)
            {
                graphics.DrawLine(p,x[i],y[i],x[i+1],y[i+1]);
            }
        }
Добавлено через 33 секунды
Или
C#
1
2
3
4
5
6
7
8
public void Draw(Graphics graphics)
        {
            Pen p = new Pen(Color.Red, 3);
            for (int i = 0; i < x.Length-1; i++)
            {
                graphics.DrawLine(p,x[i],y[i],x[i+1],y[i+1]);
            }
        }
0
0 / 0 / 0
Регистрация: 14.01.2016
Сообщений: 28
06.06.2018, 16:48  [ТС]
Добавлено через 24 минуты
мне нужно брать координаты с формы, я сделал событие которые после клика по форме добавляет координаты в массив, и как бы из этого массива и нужно рисовать
0
315 / 244 / 149
Регистрация: 03.10.2017
Сообщений: 886
Записей в блоге: 1
06.06.2018, 16:50
darkkkky, Надеюсь у вас всё получилось
0
35 / 34 / 25
Регистрация: 11.04.2015
Сообщений: 129
06.06.2018, 20:51
C#
1
2
3
4
5
Point[] point =
                        {
                    new Point(x[i],y[j])
                    
                    };
Вот здесь, каждый раз создается ссылка на новый массив это все происходит в итерации..
Создайте Point[] point = new.. массив по выше
Внесите счетчик counter и вот в итерации уже присваивайте значение элементу массива.
point[counter++] = new Point(x[i], y[j])
0
0 / 0 / 0
Регистрация: 14.01.2016
Сообщений: 28
06.06.2018, 23:03  [ТС]
но вот проблема еще есть, я создал как бы 2 разных объекта, но при их отрисовки они соеденены(на фото зачеркнул что мне не нужно), пробовал после создания объекта очищать List points, тогда точки удаляются и у экземпляра класса, как быть?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
public partial class Form1 : Form
    {
 
        public Form1()
        {
            InitializeComponent();            
        }     
        List<Obj> lo = new List<Obj>();
        List<Point> points = new List<Point>();
        private void pictureBox1_MouseClick(object sender, MouseEventArgs e) // Добавление точек мыши в List Points
        {
            var location = e.Location;
            int X = location.X;
            int Y = location.Y;
            Graphics g = Graphics.FromImage(pictureBox1.Image);
            Brush brush = Brushes.Blue;
            g.FillEllipse(brush, X, Y, 7, 7);
            pictureBox1.Refresh();
            points.Add(e.Location);
        }
        private void button2_Click(object sender, EventArgs e) // Отрисовка объекта
        {
            Graphics g = Graphics.FromImage(pictureBox1.Image);
            foreach(Obj o in lo)
            {
                o.Draw(g);              
            }
            pictureBox1.Refresh();
        }
        private void button3_Click(object sender, EventArgs e) // Добавление объекта в список
        {
            string nam = textBox1.Text;
            lo.Add(new Obj(nam, points));
            label1.Text = lo.Count.ToString();
        }
        private class Obj // Класс объекта который нужно отрисовать
        {
            public string name;
            List<Point> point = new List<Point>();
            public Obj(string name, List<Point> point)
                {
                this.name = name;
                this.point = point;                
                }
            public void Draw(Graphics graphics)
            {
                Pen f = new Pen(Brushes.GreenYellow, 3);
                Point[] p = new Point[point.Count];
                for (int i = 0; i < point.Count; i++)
                {
                    p[i] = point[i];
                }
                graphics.DrawLines(f, p);
            }
        }
    }
Миниатюры
DrawLines рисование линий по точкам из массива  
0
0 / 0 / 0
Регистрация: 14.01.2016
Сообщений: 28
07.06.2018, 10:33  [ТС]
все исправлено вот код
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
namespace GIS_LB
{
    public partial class Form1 : Form
    {
 
        public Form1()
        {
            InitializeComponent();            
        }     
        List<Obj> lo = new List<Obj>();
        List<Point> points = new List<Point>();
        private void pictureBox1_MouseClick(object sender, MouseEventArgs e) // Добавление точек мыши в List
        {
            var location = e.Location;
            int X = location.X;
            int Y = location.Y;
            Graphics g = Graphics.FromImage(pictureBox1.Image);
            Brush brush = Brushes.Blue;
            g.FillEllipse(brush, X, Y, 7, 7);
            pictureBox1.Refresh();
            points.Add(e.Location);
        }
        private void button2_Click(object sender, EventArgs e) // Отрисовка объекта
        {
            Graphics g = Graphics.FromImage(pictureBox1.Image);
            foreach(Obj o in lo)
            {
                o.Draw(g);              
            }
            pictureBox1.Refresh();
        }
        private void button3_Click(object sender, EventArgs e) // Добавление объекта в список
        {
            string nam = textBox1.Text;
            List<Point> points_copy = new List<Point>();
            points_copy = points.GetRange(0, points.Count);
            Obj obj = new Obj(nam, points_copy);
            lo.Add(obj);
            points.Clear();
            label1.Text = lo.Count.ToString();
        }
        private class Obj // Класс объекта который нужно отрисовать
        {
            public string name;
            List<Point> point = new List<Point>();
            public Obj(string name, List<Point> point)
                {
                this.name = name;
                this.point = point;                
                }
            public void Draw(Graphics graphics)
            {
                Pen f = new Pen(Brushes.GreenYellow, 3);
                Point[] p = new Point[point.Count];
                for (int i = 0; i < point.Count; i++)
                {
                    p[i] = point[i];
                }
                graphics.DrawLines(f, p);
 
            }
        }
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.06.2018, 10:33
Помогаю со студенческими работами здесь

Строю график по точкам, но линий не видно
Построил график по точкам в маткаде. Первый график удался, а второй нет. Значения пробовал менял не помогает. Я самоучка не судите строго....

Массив линий, построенный по точкам, расставленным мышью
Привет, Форумчане! Функция DrawLines(), графически дает нам возможность создать массив точек(Point) и линий. Собрал простенькую...

Рисование по точкам в Quartz 2D
Нужно нарисовать точки, а потом их соединить линиями. А так же мне нужно узнать координаты этих точек (как по мне, то нужно узнать...

Рисование фигур по точкам
Здравствуйте! меня интересует такой вопрос: как мне нарисовать фигуры по двум точкам. Ниже приведен мой вариант, но у меня за начальную...

Рисование графика по точкам
Великие умы, подскажите путь решения следующей проблемы: Имеется задача: нарисовать график по 256 точкам, которые в свою очередь...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru