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

Команда на MouseClick

25.11.2015, 19:26. Показов 901. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
в данной программе луч падает на определенную точку на вертикальной прямой, проходя ее, преломляется. Надо, чтобы пользователь мог сам выбрать точку на вертикальной прямой, куда будет падать луч, нажатием на эту точку мышью. Дальше луч должен также преломляться.
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            pictureBox1.Image = new Bitmap(pictureBox1.Width, pictureBox1.Height);
            Graphics g = Graphics.FromImage(pictureBox1.Image);
            g.DrawLine(Pens.Black, new Point(0, pictureBox1.Height / 2), new Point(pictureBox1.Width, pictureBox1.Height / 2));
            g.DrawLine(Pens.Black, 150, 0, 150, 200);
            g.Dispose();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            (sender as Button).Enabled = false;
            int degrees = Int32.Parse(textBox1.Text);
            Image img = pictureBox1.Image;
            Graphics g = Graphics.FromImage(img);
            double angleFi = Math.PI * degrees / 180; //переводим угол в радианы
            double cosFi = Math.Cos(angleFi);
            double sinFi = Math.Sin(angleFi);
            List<Point> LP = new List<Point>(); //создаем список точек
            angleFi = angleFi % (2 * Math.PI); //убираем лишнее, если угол задан больше 360
 
            var pcount = Math.Truncate(angleFi / Math.PI);  //находим, с какой стороны падает луч-сверху или снизу
 
            int quart = (int)Math.Truncate(angleFi / (Math.PI / 2)); //находим, четверть, с которой падает луч
 
            bool sing = quart == 1 || quart == 3 ? true : false; //переменная, которая потом поможет рассчитать итоговый угол(находим его, вычитая/добавляя угол B к воображаемой оси Y, в зависимости от того, откуда падает луч)
 
            var alfaAngle = Math.Abs(pcount * Math.PI + Math.PI / 2 - angleFi); //находим угол А
 
            var betaAngle = Math.Asin(Math.Sin(alfaAngle) / 1.5F); //находим угол В
 
            var RealAngle = pcount * Math.PI + Math.PI + Math.PI / 2 + (sing ? betaAngle : -betaAngle); //тут находим реальный угол между осью и преломленным лучом, исходя из которого уже можно рисовать
 
            for (int i = 0, x = 1, y = 1; x < img.Width && y < img.Height && y > 0 && x > 0; i++) //добавляем в список все точки преломленного луча
            {
                x = (Int32)(img.Width / 2 - Math.Round(i * Math.Cos(RealAngle)));
                y = (Int32)(img.Height / 2 - Math.Round(i * Math.Sin(RealAngle)));
                LP.Add(new Point(x, y));
            }
            LP.Reverse(); //переворачиваем список, дабы луч соединился по порядку
 
            for (int i = 0, x = 1, y = 1; x < img.Width && y < img.Height && y > 0 && x > 0; i++) //добавляем в список точки луча до преломления
            {
                x = (Int32)(img.Width / 2 - Math.Round(i * cosFi));
                y = (Int32)(img.Height / 2 - Math.Round(i * sinFi));
                LP.Add(new Point(x, y)); 
            }
 
            Timer t = new Timer(); //запускаем таймер
            int j = LP.Count - 1;
            t.Interval = 10; //задаем интервал таймера
            t.Tick += (s, ea) => 
            {
                g.FillRectangle(Brushes.Red, LP[j].X, LP[j].Y, 1, 1);
                g.Flush();
                pictureBox1.Invalidate();
                j--;
                if (j < 0)
                {
                    g.Dispose();
                    (sender as Button).Enabled = true;
                    (s as Timer).Dispose();
                }
            };
            t.Start(); //рисуем
        }
 
 
    }
}
На нижних двух изображениях результаты работы программы. На 1 картинке программы, которая есть сейчас, на 2 которая примерно должна быть.
Миниатюры
Команда на MouseClick   Команда на MouseClick  
Вложения
Тип файла: 7z optika.7z (34.1 Кб, 4 просмотров)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.11.2015, 19:26
Ответы с готовыми решениями:

Замена события MouseClick элемента управления, событием MouseClick формы
Здравствуйте. Прошу помощи у знающих. В главной форме frmMain создаётся объект класс MyClass, содержащий PictureBox, который в свою...

Добрый день. Вероятность того что команда а и команда б забьет 2,3,4,5 голов
Команда а, сыграла дома 12 матчей забила 17 мячей и пропустила 7 Команда б, сыграла в гостях 12 матчей забила 11 мячей и пропустила 16 ...

Mouseclick на JS
Возможно ли на javascript или jquery сделать так чтоб при открытии страницу просто тупо нажималась левая кнопка мыши? или же через...

3
 Аватар для Веселый
87 / 88 / 48
Регистрация: 12.10.2013
Сообщений: 1,103
25.11.2015, 20:14
Я думаю, если объеденить эту программу с вашей ,то получиться то что нужно.
Вложения
Тип файла: rar CursorPositionn.rar (68.6 Кб, 4 просмотров)
0
0 / 0 / 0
Регистрация: 29.10.2015
Сообщений: 28
27.11.2015, 10:03  [ТС]
Не думаю, что данная программа подходит для этого
0
 Аватар для Веселый
87 / 88 / 48
Регистрация: 12.10.2013
Сообщений: 1,103
27.11.2015, 19:08
Nezaznaika,возможно это и так.Но сама идея использования MauseClick(int x,int y) в вашей программе не так уж плоха.Используя координаты нажатия ЛКМ , я думая вам не составит труда ,используя (судя по коду) ваши знания, изменить (betaAngle);
C#
1
//тут находим реальный угол между осью и преломленным лучом, исходя из которого уже можно рисовать
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.11.2015, 19:08
Помогаю со студенческими работами здесь

Событие MouseClick
Здравствуйте,господа.Подскажите мне, пожалуйста, как сделать клик по битмапу...Сам сделал, но битмап не реагирует совсем,очень...

PictureBox MouseClick
Всем добрый день) Есть такой код namespace WindowsFormsApplication1 { public partial class Form1 : Form { ...

MouseClick и Console
Хочу чтобы програрама(консольная) реагировала на клики миши(например передавала координаты где был произведен клик) такое в консоли без...

Button.MouseClick
Здравствуйте. я написал событие нажатия кнопки мыши по кнопке button.MouseClick += new MouseEventHandler(button_MouseClick); Но...

Отключить MouseClick
Добрый день! У меня на форме есть panel1, на которую благодаря panel1_MouseClick после клика на левую клавишу мыши выводятся некие...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
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 . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru