Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.62/21: Рейтинг темы: голосов - 21, средняя оценка - 4.62
7 / 7 / 3
Регистрация: 19.04.2016
Сообщений: 169

Интерактивность в электрической схеме

19.04.2016, 12:50. Показов 4484. Ответов 39
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Словами описать сложно, но попробую.
Я видел программу, на которой была изображена цепь, которую обычно собирают на уроках по физике или электротехнике.
Частью этой цепи был реостат. Двигая его, можно было изменять его параметры.
Очень было похоже на TrackBar, но вся соль в том, что передвигался именно ползунок реостата (Часть этой картинки)

Вопрос:
Как такую программу реализовать? Стоит ли использовать C# и если нет, то на какие технологии мне обратить свой взор?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.04.2016, 12:50
Ответы с готовыми решениями:

Определения на электрической схеме
Всем добрый день! Подскажите пожалуйста, что означают определения на данной схеме? R - резистор, C - конденсатор, К - это ключ...

УГО на схеме электрической принципиальной (Э3)
Всем здравствуйте) Подскажите пожалуйста, что за элементы, которые выделены красным) Все остальное я знаю) Заранее спасибо)

Трассировка ПП по схеме электрической принципиальной
Доброго времени суток! столкнулся с такой проблемой, что не могу разобрать пример как нужно делать плату по схеме вот схема, а вот плата...

39
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
19.04.2016, 13:33
Dauary, думаю на WPF можно реализовать (тот же трекбар, просто фон это одна картинка, а ползунок - другая). Вообще по функционалу очень напоминает игру, так что игровые движки а-ля юнити сюда же.
0
7 / 7 / 3
Регистрация: 19.04.2016
Сообщений: 169
19.04.2016, 20:32  [ТС]
Unity сложен в освоении? К тому же не уверен, программа должна расчеты производить. Он на это рассчитан?
0
103 / 104 / 54
Регистрация: 23.03.2016
Сообщений: 462
20.04.2016, 02:34
Dauary, Unity это только игровой движок, в освоении не сложен. Код, написанный под консольное приложение / формы адаптируется довольно просто. Более того, скрипты пишутся на C#.
0
Эксперт .NET
 Аватар для Usaga
14140 / 9369 / 1350
Регистрация: 21.01.2016
Сообщений: 35,268
20.04.2016, 07:09
Dauary, мне кажется, что для решения такой простой задачи игровые движки использовать сильно жирно. Просто движок-движком, но в нём придётся кодировать туже самую логику, что можно было бы написать и для контрола Canvas.

Неужели в обработчике мыши проверить координаты всех электрических элементов и выполнить над найденным некоторое действие будет настолько сложно, что разбираться в Unity, и писать, по сути, тоже самое, но в контексте движка, с учётом всей его сложности будет проще?
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
20.04.2016, 10:34
Dauary, Unity не сложно, но зависит от задачи. Если она будет усложнятся - новые компоненты, все такое, то лучше юнити. Если же тупо реализовать в том виде, в котором есть - то я думаю WPF наше все.

Что касается "производить расчеты" - люди в майнкрафте умудрились комп построить, который расчеты производит, не то что на языке общего назначения, которым C# и является.
0
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,965
Записей в блоге: 231
24.04.2016, 00:58
Dauary, мне недавно пришла в голову идея реализовать что-то типа игры "собери электрическую цепь" на Unity. А тут увидел вашу тему. Давайте попробуем? С вас всё что касается физики электричества, а с меня реализация в Unity. Там всё просто. Я вам поясню если что непонятно. Умею создавать простые модели в Blender'е и тектурировать в нём же и GIMP'е

Покажите, какую электрическую цепь надо собирать. А я пока сделаю реостат, чтобы можно было передвигать его ручку мышкой
1
7 / 7 / 3
Регистрация: 19.04.2016
Сообщений: 169
24.04.2016, 09:55  [ТС]
8Observer8, заманчиво конечно, но я пишу диплом, и мне нужно понимать все, что в нем будет, поэтому перекладывать часть работы на других я не могу.

Но у меня появился вопрос: Допустим на Unity все получилось. Можно ли готовую "Игру" поместить в Win Form? Или хотя бы по нажатию Button сделать ее появление?
0
103 / 104 / 54
Регистрация: 23.03.2016
Сообщений: 462
24.04.2016, 10:15
Dauary, сперва напишите в C# классы и их методы, потом делаете визуализацию хоть в формах, хоть впф, юнити или консоли
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
24.04.2016, 11:44
Ну зачем здесь юнити? Чем здесь поможет WPF? OMG, куда катится мир

Dauary,

Кликните здесь для просмотра всего текста
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;
 
namespace WindowsFormsApplication312
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
 
            var figures = new Figures();
            
            //создаем перем резистор
            var tr = new VariableResistor();
            tr.Move(100, 200);
            figures.Add(tr);
 
            var pn = new FigurePanel {Parent = this, Dock = DockStyle.Fill};
            pn.Figures = figures;
        }
    }
 
    //контрол для отрисовки фигур
    public class FigurePanel : UserControl
    {
        public Figures Figures { get; set; }
 
        private Figure selectedFigure;
        private Marker selectedMarker;
        private Point startMouseDrag;
 
        public FigurePanel()
        {
            SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer | ControlStyles.UserPaint, true);
 
            BackColor = Color.White;
        }
 
        protected override void OnPaint(PaintEventArgs e)
        {
            if(Figures == null) return;
 
            e.Graphics.SmoothingMode = SmoothingMode.HighQuality;
 
            //рисуем фигуры
            foreach (var f in Figures)
                e.Graphics.DrawPath(Pens.Black, f.Path);
 
            //рисуем маркеры для выделенной фигуры
            if (selectedFigure != null)
            {
                foreach (var m in selectedFigure)
                    m.Draw(e.Graphics);
            }
        }
 
        protected override void OnMouseDown(MouseEventArgs e)
        {
            base.OnMouseDown(e);
 
            if (Figures == null) return;
 
            if (e.Button == MouseButtons.Left)
            {
                startMouseDrag = e.Location;
 
                //есликликнули на маркер - выделяем маркер
                if (selectedFigure != null)
                {
                    foreach (var m in selectedFigure)
                    if (m.HitTest(e.Location))
                    {
                        selectedMarker = m;
                        return;
                    }
                }
 
                selectedFigure = null;
                selectedMarker = null;
 
                //ищем фигуру под мышкой
                using(var pen = new Pen(Color.Black, 3))
                foreach (var f in Figures)
                if (f.Path.IsOutlineVisible(e.Location, pen))
                {
                    selectedFigure = f;//выделяем фигуру
                    break;
                }
 
                Invalidate();
            }
        }
 
        protected override void OnMouseMove(MouseEventArgs e)
        {
            base.OnMouseMove(e);
 
            if (e.Button == MouseButtons.Left)
            {
                var dx = e.Location.X - startMouseDrag.X;
                var dy = e.Location.Y - startMouseDrag.Y;
                startMouseDrag = e.Location;
 
                if(selectedFigure != null)
                {
                    if(selectedMarker != null)
                    {
                        //двигаем маркер
                        selectedMarker.Move(dx, dy);
                        selectedFigure.Build();
                    }else
                    {
                        //двигаем фигуру целиком
                        selectedFigure.Move(dx, dy);
                    }
 
                    Invalidate();
                }
            }
        }
    }
 
    //список фигур
    public class Figures : List<Figure>
    {
    }
 
    //базовая фигура
    public abstract class Figure : List<Marker>
    {
        public GraphicsPath Path { get; private set; }
        public abstract void Build();
 
        public Figure()
        {
            Path = new GraphicsPath();
        }
 
        public void Move(float dx, float dy)
        {
            foreach (var m in this)
                m.Move(dx, dy);
 
            Build();
        }
    }
 
    //маркер
    public class Marker
    {
        public const int Size = 7;
 
        public float X { get; set; }
        public float Y { get; set; }
 
        public Marker(float x, float y)
        {
            X = x;
            Y = y;
        }
 
        public void Draw(Graphics gr)
        {
            gr.DrawRectangle(Pens.Red, X- Size /2, Y - Size / 2, Size, Size);
        }
 
        public bool HitTest(Point p)
        {
            return Math.Abs(p.X - X) <= Size/2 && Math.Abs(p.Y - Y) <= Size/2;
        }
 
        public static implicit operator PointF(Marker m)
        {
            return new PointF(m.X, m.Y);
        }
 
        public void Move(float dx, float dy)
        {
            X += dx;
            Y += dy;
        }
    }
 
 
    /// <summary>
    /// Переменный резистор (реостат)
    /// </summary>
    public class VariableResistor : Figure
    {
        private const int Width = 50;
        private const int Height = 20;
 
        public VariableResistor()
        {
            Add(new Marker(0, 0));
            Add(new Marker(0, -Height * 2));
            Build();
        }
 
        public override void Build()
        {
            Path.Reset();
            var p0 = new PointF(this[0].X - Width / 2, this[0].Y);
            var p1 = new PointF(this[0].X + Width / 2, this[0].Y);
            //
            var p2 = this[1];
            if (p2.X < p0.X) p2.X = p0.X;
            if (p2.X > p1.X) p2.X = p1.X;
            this[1] = p2;
            //
 
            var d0 = p2.Y < p0.Y ? -5 : 5;
            var p3 = p2.Y > p0.Y ? new PointF(p2.X, p0.Y + Height / 2 + d0) : new PointF(p2.X, p0.Y - Height / 2 + d0);
            //resistior
            Path.AddRectangle(new RectangleF(p0.X, this[0].Y - Height / 2, Width, Height));
 
            //pins (temp, in release you need to draw connections with other components)
            Path.StartFigure();
            Path.AddLine(p0.X - 10, p0.Y, p0.X, p0.Y);
 
            Path.StartFigure();
            Path.AddLine(p1.X + 10, p1.Y, p1.X, p1.Y);
 
            //variator
            Path.StartFigure();
            var d1 = Math.Abs(d0);
            Path.AddLine(p2.X, p2.Y, p3.X, p3.Y);
            Path.AddLine(p3.X, p3.Y, p3.X + d1, p3.Y);
            Path.AddLine(p3.X + d1, p3.Y, p3.X, p3.Y - d0);
            Path.AddLine(p3.X, p3.Y - d0, p3.X - d1, p3.Y);
            Path.AddLine(p3.X - d1, p3.Y, p3.X, p3.Y);
        }
    }
}


Название: Скриншот 2016-04-24 11.39.10.png
Просмотров: 133

Размер: 9.7 Кб

Код выглядит сложноватым, но это не просто отрисовка резистора, это движок, который позволит вам рисовать любые электрические компоненты, двигать их, соединять и настраивать.
2
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
24.04.2016, 11:44
Дубль.
0
7 / 7 / 3
Регистрация: 19.04.2016
Сообщений: 169
24.04.2016, 12:14  [ТС]
Storm23, дело в том, что мне нужно не схема цепи, а то что я прикрепил к картинке
Миниатюры
Интерактивность в электрической схеме  
0
7 / 7 / 3
Регистрация: 19.04.2016
Сообщений: 169
24.04.2016, 12:14  [ТС]
Storm23, на той программе двигались стрелочки, а также у резистора вон тот ползунок можно было двигать.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
24.04.2016, 12:20
Цитата Сообщение от Storm23 Посмотреть сообщение
Ну зачем здесь юнити? Чем здесь поможет WPF? OMG, куда катится мир
Ну вы как-то не серьезно к делу подходите.
А спецэффекты? Если, например, цепь закоротить или напряжение до звезд выкрутить? А анимация? Аудиоэффекты?
Ну а при хорошей картинке можно и функционал расширить: скиллы прокачивать (Электрик +25), шмотье там добавить ([Резиновые Перчатки Фарадея]) — благо выше уже товарищи подтянулись, которые и модельки наделают; ачивки всякие и пр.
Масштабней надо думать, масштабней!

Ох, нарвусь я когда-нибудь...
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
24.04.2016, 12:22
Цитата Сообщение от Dauary Посмотреть сообщение
на той программе двигались стрелочки, а также у резистора вон тот ползунок можно было двигать.
Ну можно вместо линий рисовать и картинки. Дайте исходники картинок, я вам переделаю на картинки.

Добавлено через 54 секунды

Не по теме:

kolorotur, Да, вы правы, каюсь. Но вы еще забыли про то, что ачивки нужно постить в социалках.

0
310 / 318 / 119
Регистрация: 29.10.2011
Сообщений: 1,006
24.04.2016, 12:24
Цитата Сообщение от Dauary Посмотреть сообщение
на той программе двигались стрелочки, а также у резистора вон тот ползунок можно было двигать
Как-то слабовато для диплома будет. Моделирование своей сети думаю больше бы подошло
0
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,965
Записей в блоге: 231
24.04.2016, 12:42
Мне кажется, лучше сделать, чтобы можно было брать из инвентаря электрические элементы и крафтить их, соединяя проводами. Нужно найти 3D модели элементов в хорошем качестве
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
24.04.2016, 13:26
sldp, у нас один парень для диплома просто показал стандартную форму 1С, в которой всякие значения он заполнил и 1С создал куб и что-то там посчитал. Так что это еще продвинутый уровень.

kolorotur, насколько я понимаю суть диплома как раз в этих свистелках и состоит. Тем более, что обычно заказчику не очень нравится привет из 90ых, если мы про реальные формочки говорим.
0
24.04.2016, 13:32

Не по теме:

Psilon, да я ж без претензий, просто пошутил.

0
7 / 7 / 3
Регистрация: 19.04.2016
Сообщений: 169
24.04.2016, 14:14  [ТС]
Цитата Сообщение от sldp Посмотреть сообщение
Как-то слабовато для диплома будет.
Это не единственное, что будет делать программа. Просто этим я занимаюсь в данный момент.
Цитата Сообщение от Psilon Посмотреть сообщение
я понимаю суть диплома как раз в этих свистелках и состоит
Ну не совсем.
Сейчас я хочу понять, как в Win Forms [Потому что я уже начал делать диплом именно там] сделать схему, как на рисунке, и чтобы я мог двигать катушку резистора.

Единственное что мне приходит в голову, это понаделать кучу пиксербоксов - и в зависимости от положения мыши скрывать все .Hide и показывать нужный .show
Вот только это будет крайне неудобно.

Что касается Unity - ни разу не имел с ним дело. И мне страшно начинать, ибо времени не так много осталось, чтобы еще изучать новую технологию.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.04.2016, 14:14
Помогаю со студенческими работами здесь

Конструктивный компонент на схеме электрической структурной
Здравствуйте. Рисовал структурную схему и столкнулся с проблемой: не знаю как указать в принципиальной схеме, то что обведено красным,...

Составить уравнения состояния по электрической схеме
По данной схеме нужно получить математическую модель методом пространств состояний. Суть я понял, но конкретно в своем варианте застрял в...

Расчет разветвленной линейной электрической цепи постоянного тока с одним источником электрической энергии
Доброй ночи. Срочно нужна помощь. Определить токи в ветвях методом преобразований ...

Интерактивность в приложении
1)Можно ли при нажатии на какую-либо кнопку отключить определенную функцию в запущенной программе. Например, отключить ф-ю, которая...

Интерактивность форм на VS 2010 C++
Добрый вечер! Очередной камень преткновения, о котором немало рассуждений в сети, изменение переменных одной формы функционалом другой....


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru