Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/21: Рейтинг темы: голосов - 21, средняя оценка - 4.90
0 / 0 / 1
Регистрация: 20.03.2016
Сообщений: 23

Нарисовать прямую линию, заданную курсором

01.04.2016, 12:43. Показов 4116. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. У меня вопрос:"Как нарисовать прямую линию, заданную курсором?" То есть, я пытаюсь сделать линии, типа "paint", к сожалению, у меня немного не получается присваивать значения x1,y1,x2,y2 так, чтобы линии рисовались правильно, можете подсказать как это реализовать?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.04.2016, 12:43
Ответы с готовыми решениями:

нарисовать прямую линию
Как с++ builder нарисовать прямую линию (напобобие как это делалось в paint)! Помогите плиз, дайте код!

Интерполяция почему-то рисует прямую линию
Может быть я до конца не понимаю смысл полиномов. Однако вроде я использую верные формулы для интерполяции. Собственно есть 4 метода...

Провести прямую линию между двумя объектами по нажатию кнопки
Добрый вечер. Есть вопрос: есть два объекта panel2 и panel4, которые находятся в panel1. Как по нажатию на jButton1 отрисовать между...

19
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
01.04.2016, 13:23
А на чем Вы рисуете? Можете выложить код проекта?
0
0 / 0 / 1
Регистрация: 20.03.2016
Сообщений: 23
01.04.2016, 13:35  [ТС]
Да, конечно.
Вложения
Тип файла: rar Paint4.0.rar (32.8 Кб, 6 просмотров)
0
0 / 0 / 1
Регистрация: 20.03.2016
Сообщений: 23
01.04.2016, 13:37  [ТС]
А вот первый вопрос не очень понял...
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
01.04.2016, 13:56
Цитата Сообщение от jetsnake Посмотреть сообщение
А вот первый вопрос не очень понял..
Вы рисуете на PictureBox дизайнера форм.
Больше ничего не скажу, не умею так рисовать. Вот в Делфи так
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var
  f:boolean=true; //глобальная переменная
........................................
procedure TForm1.FormMouseDown(....................);
begin
if f then
 begin
  Canvas.MoveTo(x,y); //встаем в точку где нажали
  f:=not f//поменяли флаг
 end
else //иначе
 begin
  Canvas.LineTo(x,y);//переместились в новую точку и соединили их
  f:=not f //поменяли флаг
 end;
end;
Добавлено через 2 минуты
Это если рисовать на канве формы.
У вас
Pascal
1
procedure ptrB_MouseDown(sender: Object; e: MouseEventArgs);
а что вместо moveto, lineto я не знаю.
1
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33184 / 21482 / 8231
Регистрация: 22.10.2011
Сообщений: 36,853
Записей в блоге: 12
01.04.2016, 14:53
Лучший ответ Сообщение было отмечено jetsnake как решение

Решение

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
var
  start := Point.Empty;
  finish := Point.Empty;
 
procedure Form1.ptrB_MouseMove(sender: Object; e: MouseEventArgs);
begin
  finish := e.Location;
end;
  
procedure Form1.ptrB_MouseDown(sender: Object; e: MouseEventArgs);
begin
  drw:= true;
end;
 
procedure Form1.ptrB_MouseUp(sender: Object; e: MouseEventArgs);
var graph: Graphics;
begin
  graph:= Graphics.FromImage(ptrB.Image);
  graph.DrawLine(new Pen(Color.Red), start, finish);
  ptrB.Invalidate();
  drw:=False;
end;
В момент отпускания мыши будет рисоваться линия от точки, где мышь была зажата, до точки, где была отпущена.
1
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
01.04.2016, 15:20
А у меня по другому, после нажатия во второй точки рисуется линия.
0
0 / 0 / 1
Регистрация: 20.03.2016
Сообщений: 23
01.04.2016, 16:04  [ТС]
Благодарю, с вашей помощью, я разобрался с линией, а можете так же помочь с прямоугольником? Первую входную точку он определяет правильно, а вот вторую он отказывается видеть...и не получается заданный прямоугольник.

Добавлено через 1 минуту
Пытался подобным образом с ним поступить, но мне выдали ошибку типа:"Нет перегруженной подпрограммы с таким количеством параметров FillRectangle"

Добавлено через 8 минут
С "DrawRectangle" тоже самое.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33184 / 21482 / 8231
Регистрация: 22.10.2011
Сообщений: 36,853
Записей в блоге: 12
01.04.2016, 16:25
jetsnake, замени строку с DrawLine на
Pascal
1
graph.DrawRectangle(new Pen(Color.Red), new Rectangle(start.X, start.Y, finish.X - start.X, finish.Y - start.Y));
- будет тебе прямоугольник.
1
0 / 0 / 1
Регистрация: 20.03.2016
Сообщений: 23
01.04.2016, 16:29  [ТС]
Вау, я бы сам вряд ли до того додумался бы....Большое спасибо. Очень выручил)

Добавлено через 2 минуты
а с элипсом там тоже иначе делать надо? (С ним я разобрался, спасибо))
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33184 / 21482 / 8231
Регистрация: 22.10.2011
Сообщений: 36,853
Записей в блоге: 12
01.04.2016, 16:32
Цитата Сообщение от jetsnake Посмотреть сообщение
а с элипсом там тоже иначе делать надо?
DrawEllipse принимает те же параметры, что и DrawRectangle, так что так же, как и с прямоугольником.
0
0 / 0 / 1
Регистрация: 20.03.2016
Сообщений: 23
01.04.2016, 16:33  [ТС]
Кстати, с элипосом нет разницы задачи точек, а вот у прямоугольника строго с верхнего левого угла должна быть задача...Можно ли как-то дать ему возможность и с 3 других точек задавать маршрут
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33184 / 21482 / 8231
Регистрация: 22.10.2011
Сообщений: 36,853
Записей в блоге: 12
01.04.2016, 16:43
Лучший ответ Сообщение было отмечено jetsnake как решение

Решение

Как-то вот так (набирал прямо здесь, у меня PABC.NET нет под рукой)
Pascal
1
2
3
4
5
6
7
8
9
10
11
procedure Form1.ptrB_MouseUp(sender: Object; e: MouseEventArgs);
var graph: Graphics;
begin
  graph:= Graphics.FromImage(ptrB.Image);
  var st := new Point(Min(start.X, finish.X), Min(start.Y, finish.Y));
  var fn := new Point(Max(start.X, finish.X), Max(start.Y, finish.Y));
            
  graph.DrawRectangle(new Pen(Color.Red), new Rectangle(st.X, st.Y, fn.X - st.X, fn.Y - st.Y));
  ptrB.Invalidate();
  drw:=False;
end;
1
0 / 0 / 1
Регистрация: 20.03.2016
Сообщений: 23
01.04.2016, 16:50  [ТС]
Моё почтение, я поражаюсь вашим знаниям, учитывая, что всё это записано без PABC.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33184 / 21482 / 8231
Регистрация: 22.10.2011
Сообщений: 36,853
Записей в блоге: 12
01.04.2016, 16:52
Ну, проверить-то я проверил в C# WinForms приложении, а вот в синтаксисе могли быть ошибки.
0
0 / 0 / 1
Регистрация: 20.03.2016
Сообщений: 23
01.04.2016, 17:01  [ТС]
Кстати, быть может, ещё подсказать сумеете, как тоже самое реализовать не с "Draw", а с "Fill"?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33184 / 21482 / 8231
Регистрация: 22.10.2011
Сообщений: 36,853
Записей в блоге: 12
01.04.2016, 17:51
Точно так же, как и с Draw<...>, но первый параметр изменяется с Pen на Brush:
Pascal
1
graph.FillRectangle(new SolidBrush(Color.Red), new Rectangle(st.X, st.Y, fn.X - st.X, fn.Y - st.Y));
1
0 / 0 / 1
Регистрация: 20.03.2016
Сообщений: 23
01.04.2016, 17:56  [ТС]
Я так и подумал....я пробовал Brush, но я не знал про "SolidBrush".

Добавлено через 2 минуты
хххм, мне пишут "Unit1.pas(146) : Неверное число параметров конструктора"
Я немного тупанул, зачем-то пытался присвоить им размер, исправил и всё работает.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33184 / 21482 / 8231
Регистрация: 22.10.2011
Сообщений: 36,853
Записей в блоге: 12
01.04.2016, 18:08
Где именно? Мой код нормально компилируется в версии 1.7, так что без редактора форм, вручную создал событие:
Pascal
1
2
3
4
5
6
7
8
procedure DoMouseUp(sender: Object; e: MouseEventArgs);
var graph: Graphics;
begin
  var st := new Point(Min(start.X, finish.X), Min(start.Y, finish.Y));
  var fn := new Point(Max(start.X, finish.X), Max(start.Y, finish.Y));
            
  graph.FillRectangle(new SolidBrush(Color.Red), new Rectangle(st.X, st.Y, fn.X - st.X, fn.Y - st.Y));
end;
, никаких ошибок нет
0
0 / 0 / 1
Регистрация: 20.03.2016
Сообщений: 23
01.04.2016, 21:42  [ТС]
"Я немного тупанул, зачем-то пытался присвоить им размер, исправил и всё работает." На тот момент я уже разобрался, причину написав после.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.04.2016, 21:42
Помогаю со студенческими работами здесь

Найти прямую линию наиболее оптимальную приближенный к этим точкам
Найти прямую линию наиболее оптимальную приближенный к этим точкам (метод наименьших квадратов)

Найти проекцию точки на прямую заданную двумя пересекающимися плоскостями
http://fotohost.by/images/2014/12/11/2014-12-1118-14-09SKRINSOTEKRANA.png ...

Построить линию заданную уравнением
В общем, такая задачка: Перехожу к Декартовым координатам, получаю два корня (2 картинка), если их возвести в квадрат - путаюсь в...

Написать уравнение плоскости, проходящей через прямую заданную системой уравнений
Написать уравнение плоскости, проходящей через прямую, заданную системой уравнений (указана ниже) параллельно прямой...

Найти проекции каждой точки заданного множества в пространстве на заданную прямую
Найти проекции каждой точки заданного множества в трёхмер- ном пространстве на заданную прямую.


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru