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

Управление Bitmap'ом и динамические уравнения прямых для коллизий треугольника

12.04.2016, 14:13. Показов 995. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно по вводу с WASD крутить битмап и тем самым задавать ему вектор движения.Что бы при повороте изменялись уравнения прямой по координатам из вершин треугольника (Polygon с 3мя вершинами). Увидел Hbitmap, он получается рисует точечный рисунок? Можно ли проверить каждую точку этого рисунка для колизий?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.04.2016, 14:13
Ответы с готовыми решениями:

Написать уравнения прямых, содержащих медианы треугольника
1) написать уравнения прямых, содержащих медианы треугольника ABC: A(3,-1), B(-2,1), C(0,0). Правила форума :rtfm: 5.16....

Ветвление. Даны уравнения прямых. Выяснить, какие из этих прямых перпендикулярны
Даны уравнения прямых а1х+b1y=c1, a2x+b2y=c2, a3x+b3y=c3. Выяснить, какие из этих прямых перпендикулярны или указать, если таковых не...

Ветвление. Даны уравнения прямых. Выяснить, какие из этих прямых параллельны
Написать программу: Даны уравнения прямых а1х+b1y=c1, a2x+b2y=c2, a3x+b3y=c3. Выяснить, какие из этих прямых параллельны и указать, если...

5
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
12.04.2016, 15:49
r3dok, Озвучьте целиком ваше задание. Подробно.
Сейчас же ваш вопрос - бессвязный набор слов.
0
0 / 0 / 0
Регистрация: 03.04.2016
Сообщений: 45
12.04.2016, 16:02  [ТС]
это 2 разных задачи, все нужно для курсача. Игрок управляет условно "треугольником", при нажатии на A D битмап меняет угол поворота, этот угол должен задавать вектор движения на W S,вперед и назад.

2 задача. Регистрация попаданий, мне нужно уравнение прямой для каждой стороны "треугольника", а т.к. угол битмапа изменяется, то и уровнение прямой должно изменятся от угла битмапа.
0
 Аватар для ViterAlex
8952 / 4864 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
12.04.2016, 16:33
Цитата Сообщение от r3dok Посмотреть сообщение
мне нужно уравнение прямой для каждой стороны "треугольника"
Думаю, что нужно переходить к векторам, а не к уравнениям прямых
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
12.04.2016, 16:49
Цитата Сообщение от r3dok Посмотреть сообщение
Игрок управляет условно "треугольником", при нажатии на A D битмап меняет угол поворота, этот угол должен задавать вектор движения на W S,вперед и назад.
2 задача. Регистрация попаданий, мне нужно уравнение прямой для каждой стороны "треугольника"
По-вашему это подробное объяснение? Ну какое ТЗ, такая и реализация
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
using System;
using System.Drawing;
using System.Net;
using System.Runtime.InteropServices;
using System.Windows.Forms;
 
namespace WindowsFormsApplication339
{
    public partial class Form1 : Form
    {
        private Figure figure;
 
        public Form1()
        {
            InitializeComponent();
 
            SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer | ControlStyles.UserPaint | ControlStyles.ResizeRedraw, true);
 
            figure = new Figure() {Location = new PointF(500, 500)};
            figure.Image = Image.FromStream(new WebClient() { Proxy = null }.OpenRead(@"http://s1.iconbird.com/ico/2013/6/364/w256h2561372348496triangle256.png"));
 
            Application.Idle += delegate { Invalidate(); };
        }
 
        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);
 
            figure.Update(0.01f);
            lbEquality.Text = figure.Equality;
 
            e.Graphics.TranslateTransform(figure.Location.X, figure.Location.Y);
            e.Graphics.RotateTransform(figure.DirectionAngle);
            e.Graphics.DrawImage(figure.Image, -figure.Image.Width / 2, -figure.Image.Height / 2);
        }
    }
 
    class Figure
    {
        public float DirectionAngle { get; set; }
        public Image Image { get; set; }
        public PointF Location { get; set; }
        public float Speed { get; set; }
        public string Equality { get; private set; }
 
        public void Update(float dt)
        {
            //control
            if (Keyboard.IsKeyDown(Keys.A))
                DirectionAngle -= 1;
            if (Keyboard.IsKeyDown(Keys.D))
                DirectionAngle += 1;
 
            if (Keyboard.IsKeyDown(Keys.W))
                Speed += 1;
            if (Keyboard.IsKeyDown(Keys.S))
                Speed -= 1;
 
            //velocity
            var a = DirectionAngle;
            var velocity = new PointF((float)Math.Sin(a * Math.PI / 180) * Speed, -(float)Math.Cos(a * Math.PI / 180) * Speed);
            Location = new PointF(Location.X + velocity.X * dt, Location.Y + velocity.Y * dt);
 
            //equality
            if (Math.Abs(velocity.X) > float.Epsilon * 5)
            {
                var k = velocity.Y / velocity.X;
                var c = Location.Y - k * Location.X;
                Equality = string.Format("y = {0:0.00} * x {1} {2:0.00}", k, c >= 0 ? "+" : "-", Math.Abs(c));
            }
        }
    }
 
    /// <summary>
    /// Клавиатура
    /// </summary>
    public static class Keyboard
    {
        [Flags]
        private enum KeyStates
        {
            None = 0,
            Down = 1,
            Toggled = 2
        }
 
        [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
        private static extern short GetKeyState(int keyCode);
 
        private static KeyStates GetKeyState(Keys key)
        {
            KeyStates state = KeyStates.None;
 
            short retVal = GetKeyState((int)key);
 
            if ((retVal & 0x8000) == 0x8000)
                state |= KeyStates.Down;
 
            if ((retVal & 1) == 1)
                state |= KeyStates.Toggled;
 
            return state;
        }
 
        public static bool IsKeyDown(Keys key)
        {
            return KeyStates.Down == (GetKeyState(key) & KeyStates.Down);
        }
 
        public static bool IsKeyToggled(Keys key)
        {
            return KeyStates.Toggled == (GetKeyState(key) & KeyStates.Toggled);
        }
    }
}
Миниатюры
Управление Bitmap'ом и динамические уравнения прямых для коллизий треугольника  
1
0 / 0 / 0
Регистрация: 03.04.2016
Сообщений: 45
12.04.2016, 19:17  [ТС]
здесь понятно что не все ТЗ, да и тема курсовой у меня своя(делаю старинькую игрушку для маинфреймов 60-70х годов)

Цитата Сообщение от ViterAlex Посмотреть сообщение
Думаю, что нужно переходить к векторам, а не к уравнениям прямых
мне нужен перехват событий что координата линии(снаряд) попала в треугольник. На форуме сказали что надо объединить в класс объектов и всё там будет(я хз как это реализовывать). Препод говорит что через уровнение прямой и мы так делали на первой паре по ПЯВУ для шахмат и ферзя проверку может ли он достичь. Но тут дело в том что снаряд "летит" некоторое время и луч для него не пойдет, вот такие дела
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.04.2016, 19:17
Помогаю со студенческими работами здесь

Даны уравнения прямых ..... Выяснить, какие из этих прямых перпендикулярны
Даны уравнения прямых а1х+b1y=c1, a2x+b2y=c2, a3x+b3y=c3. Выяснить, какие из этих прямых перпендикулярны или указать, что таковых не...

Даны уравнения прямых. Выяснить, какие из этих прямых параллельны, и указать, если таковых не имеется.
Помогите решить задачу,, спасибо зарание! Даны уравнения прямых а1х+b1y=c1, a2x+b2y=c2, a3x+b3y=c3. Выяснить, какие из этих прямых...

Даны уравнения прямых. Выяснить, какие из этих прямых параллельны и указать, если таковых не имеется
Даны уравнения прямых а1х+b1y=c1, a2x+b2y=c2, a3x+b3y=c3. Выяснить, какие из этих прямых параллельны и указать, если таковых не имеется. ...

Уравнения прямых
Написать уравнения прямых, проходящих через точку (3, 1) на расстоянии 2 от точки (1, -2). Это какую систему нужно составить и решить?...

Составить уравнения прямых
Помогите, пожалуйста решить!!! 2. Составьте уравнения прямых, проходящих через точку P(3, 5) на одинаковых расстояниях от точек...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 16.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 15.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru