Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 02.05.2012
Сообщений: 3
1

Как сделать пучок из линий

02.05.2012, 14:15. Просмотров 1038. Ответов 4
Метки нет (Все метки)

Дело такое. Форма 800х800, фиксированный размер, начальная позиция формы 0х0 - верхний левый угол экрана. Координаты мыши работают не совсем корректно, поэтому установил такую начальную позицию.
После нажатия левой кнопки мыши должно произойти следующее - из той точки, где было нажатие на кнопку мыши, нарисовать, например, 20 линий в разном направлении.
Я пока сделал таким образом
C#
1
2
3
4
graphics.DrawLine(Pens.Red, MousePosition.X, MousePosition.Y, MousePosition.X, MousePosition.Y + f);
graphics.DrawLine(Pens.Red, MousePosition.X, MousePosition.Y, MousePosition.X + f, MousePosition.Y);
graphics.DrawLine(Pens.Red, MousePosition.X, MousePosition.Y, MousePosition.X, MousePosition.Y - f);
graphics.DrawLine(Pens.Red, MousePosition.X, MousePosition.Y, MousePosition.X - f, MousePosition.Y);
4 линии. получается типа + - плюсик.

Чтобы нарисовать 20 линий, мне еще придется рассчитать вручную их конечные точки. Начальная точка всех линий - одна для всех.
При этом, желательно чтобы все линии были одинаковой длины.

Если закинуть механизм рисования линий в цикл, то как будут меняться координаты конечной точки для каждой последующей линии?

Допустим,
C#
1
2
3
4
5
6
7
for(int i=0; i!=5; i++)
{
graphics.DrawLine(Pens.Red, MousePosition.X, MousePosition.Y, MousePosition.X, MousePosition.Y + f);
graphics.DrawLine(Pens.Red, MousePosition.X, MousePosition.Y, MousePosition.X + f, MousePosition.Y);
graphics.DrawLine(Pens.Red, MousePosition.X, MousePosition.Y, MousePosition.X, MousePosition.Y - f);
graphics.DrawLine(Pens.Red, MousePosition.X, MousePosition.Y, MousePosition.X - f, MousePosition.Y);
}
За один прогон цикла рисуется 4 линии, мне надо 20, поэтому i!=5.

Для того, чтобы менять конечную точку, я прибавляю/отнимаю к/от значению/я координаты число f.
Меня интересует - чему должно быть равна переменная f? Как она должна менять свое значение, чтобы нарисовать вот это:
0
Миниатюры
Как сделать пучок из линий  
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.05.2012, 14:15
Ответы с готовыми решениями:

Объясните как сделать эффект 3д,с добавлением 2-х белых линий?
Объясните как сделать эффект 3d,с добавлением 2-х белых линий??? Вот пример таких гивок...

Как сделать острые концы линий при отрисовке
Добрый день, уважаемые знатоки Корела! У меня версия CorelDRAW Х7, в Кореле я новичок,...

Просая адаптивная таблица HTML без гор.линий,как сделать?
Прошу помощи у умов HTML кода) Мне нужно сделать таблицу для сайта- из 2х столбцов( но чтобы...

Пучок электронов
пучок электронов, ускоренных в поле с разностью потенциалов u=300в, влетает в плоский конденсатор...

4
Українець
424 / 318 / 16
Регистрация: 26.09.2009
Сообщений: 844
02.05.2012, 14:20 2
ИМХО лучше использовать синусы косинусы, а потом если надо, то и длину рандомить
0
0 / 0 / 0
Регистрация: 02.05.2012
Сообщений: 3
02.05.2012, 14:25  [ТС] 3
Цитата Сообщение от freest Посмотреть сообщение
ИМХО лучше использовать синусы косинусы, а потом если надо, то и длину рандомить
о синусе косинусе совсем забыл. а еще хуже - не умею с ними работать.
0
134 / 134 / 46
Регистрация: 21.04.2009
Сообщений: 178
02.05.2012, 17:25 4
isadykov90 твой подход не совсем правильный.
freest прав. Нужно использовать тригонометрию - плясать нужно от углов.
В данной задаче идеально подойдет параметрическое описание окружности(в приложении). Об этом можешь прочесть на википедии.
Итого, данную задачу можно решить следующим образом:
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
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;
using System.Data.SqlClient;
 
namespace NEW
{
    public partial class Form1 : Form
    {
        //Это будут координаты клика мышки и центра пучка
        int X;
        int Y;
 
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Paint(object sender, PaintEventArgs e)
        {
            Point N = new Point();
            //Координаты центра пучка, они же координаты клика мышки
            int center_X = X;
            int center_Y = Y;
            //Радиус окружности, в которой находиться пучок в пикселях
            int radius = 100;
            //Угол между линиями в пучке
            int alfa = 10;
            //Делим круг на 36 частей
            for (int degrees = 0; degrees <= 36; degrees++)
            {
                //Задаем параметрические координаты второй точки каждой линии(она лежит на окружности)
                N.X = center_X + Convert.ToInt16(radius * Math.Cos(alfa * degrees * Math.PI / 180));
                N.Y = center_Y + Convert.ToInt16(radius * Math.Sin(alfa * degrees * Math.PI / 180));
                //Рисуем линию(от цента до точки на окружности)
                e.Graphics.DrawLine(Pens.Red, new Point(X, Y), N);
            }
        }
 
        private void Form1_MouseClick(object sender, MouseEventArgs e)
        {
            //Извлекаем координаты клика мышки на форме 
            X = e.X;
            Y = e.Y;
            Invalidate();
        }
   }
}
Результат выполения данного кода, можешь увидеть в приложении. По клику мышки рисуем пучок нужного радиуса с центром самого клика Играясь с радиусом и улом между линиями пучка ты будешь делать его больше-меньше и гуще-реже Как тебе такой способ?
1
Миниатюры
Как сделать пучок из линий  
Изображения
 
0 / 0 / 0
Регистрация: 02.05.2012
Сообщений: 3
14.05.2012, 14:08  [ТС] 5
круто

напишу ка, что я хотел сделать с этим пучком: каждая линия, которая исходит от центра уменьшались на определенное значение в зависимости от пересечения с другой линией.
цель в том, что я хотел смоделировать зону покрытия беспроводной точки доступа.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.05.2012, 14:08

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Сделать прямоугольник, состоящий из 5 горизонтальных линий
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;graphics.h&gt; main() { int x1=100, x2=300,...

Сделать чертеж и составить уравнение линий
полученной при таком движении точки M(x;y) , что расстояние от нее до точки до точки А (-3;0)...

Сделать чертеж и составить уравнение линий
каждая точка которой находится вдвое дальше от точки А(4;0 , чем от точки В(1;0)

Графика - пучок прямых
Нароод, помогите пожалуйста с задачей, как можно изобразить пучок прямых?


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.