Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 05.01.2017
Сообщений: 5
1

Вычислительная геометрия

04.02.2017, 03:30. Показов 2373. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Задан квадрат со стороной R и некоторым числом N.На сторонах этого квадрата создается 4N точек. По одной точке размещается в вершинах квадрата, а остальные равномерно распределяются по сторонам квадрата так, чтобы расстояние между двумя последовательными точками равнялось R/N. Указанные пары точек соединяются между собой по правилу: Pi соединяется с Pj , для которых (j-i) является числом Фибоначчи меньше за 4N (вычитание происходит по модулю 4N).
Необходимо изобразить графически.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.02.2017, 03:30
Ответы с готовыми решениями:

Окно неправильной формы (геометрия)
Всем привет. Перекопал всё в поиске и не нашел кое-что... Я искал способ изменить графический вид...

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

Геометрия образа диска
Всем привет. Вопрос такой: как получить информацию о геометрии образа диска? Вызов ф-ии:...

Вычислительная геометрия на С
Заданы координаты N точек. Определить те две точки, проведенная через которые прямая делит...

1
8940 / 4852 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
07.02.2017, 05:21 2
Лучший ответ Сообщение было отмечено New_Person как решение

Решение

Примерно так:
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
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Linq;
using System.Windows.Forms;
 
namespace ComputeGeometry
{
    public partial class MainForm : Form
    {
        #region Свойства
 
        private List<PointF> _points;
        private List<Tuple<PointF, PointF>> _connectPoints;
        const float R = 3;
 
        #endregion
 
        public MainForm()
        {
            InitializeComponent();
            rNumericUpDown.Maximum = decimal.MaxValue;
            panel1.Paint += panel1_Paint;
            Load += Form1_Load;
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            rNumericUpDown.Value = Math.Min(panel1.ClientSize.Width, panel1.ClientSize.Height) - 15;
        }
 
        private void panel1_Paint(object sender, PaintEventArgs e)
        {
            if (_points == null || _connectPoints == null || _points.Count == 0)
            {
                return;
            }
            e.Graphics.TranslateTransform(
                splitContainer1.Panel2.ClientSize.Width / 2f, splitContainer1.Panel2.ClientSize.Height / 2f);
            e.Graphics.SmoothingMode = SmoothingMode.HighQuality;
 
            //Рисование соединений
            foreach (var tuple in _connectPoints)
            {
                e.Graphics.DrawLine(Pens.Red, tuple.Item1, tuple.Item2);
            }
            //Рисование точек
            foreach (var pt in _points)
            {
                e.Graphics.FillEllipse(Brushes.Blue, pt.X - R, pt.Y - R, 2 * R, 2 * R);
            }
        }
 
        private void buildUpButton_Click(object sender, EventArgs e)
        {
            int n = (int)nNumericUpDown.Value;
            float r = (int)rNumericUpDown.Value;
            //Левая верхняя вершина квадрата
            _points = new List<PointF>
                      {
                          new PointF(
                              -r / 2, -(float) (rNumericUpDown.Value / 2))
                      };
            //Расстояние между точками
            float dr = r / n;
            //векторы сторон квадрата
            var vectors = new List<Point>
                {
                    new Point(1, 0),
                    new Point(0, 1),
                    new Point(-1, 0),
                    new Point(0, -1)
                };
            var pt0 = _points[0];
 
            //Размещение точек на сторонах квадрата
            foreach (var vector in vectors)
            {
                for (int i = 1; i <= n; i++)
                {
                    var pt = pt0;
                    pt.X += i * dr * vector.X;
                    pt.Y += i * dr * vector.Y;
                    _points.Add(pt);
                }
                pt0 = _points.Last();
            }
            _points.RemoveAt(_points.Count - 1);
 
            //Пары точек для соединения
            _connectPoints = new List<Tuple<PointF, PointF>>();
            for (int i = 0; i < _points.Count; i++)
            {
                for (var j = i + 1; j < _points.Count; j++)
                {
                    if (IsFibonacci((j - i) / 4 * n))
                        _connectPoints.Add(new Tuple<PointF, PointF>(_points[i], _points[j]));
                }
            }
            panel1.Invalidate();
        }
 
        //Проверка, является ли число — числом Фибоначчи
        private static bool IsFibonacci(int n)
        {
            int a = 1, b = 1;
            if (n == 1)
            {
                return true;
            }
            while (b < n)
            {
                b += a;
                a = b - a;
            }
            return b == n;
        }
 
        private void rNumericUpDown_ValueChanged(object sender, EventArgs e)
        {
            buildUpButton.PerformClick();
        }
    }
}
Миниатюры
Вычислительная геометрия  
Вложения
Тип файла: zip ComputeGeometry.zip (17.5 Кб, 11 просмотров)
0
07.02.2017, 05:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.02.2017, 05:21
Помогаю со студенческими работами здесь

Вычислительная геометрия
С данными множествами пунктов на плоскости выбрать 3 разных пункта, которые образуют треугольник,...

Вычислительная геометрия
здравствуйте. какие доступные книги вы мне посоветуете по вычислительной геометрии.

Заметание плоскости. Вычислительная геометрия
Пытаюсь сделать алгоритм нахождения пересечения отрезков. Лобовой алгоритм реализовал, теперь нужно...

Вычислительная геометрия, путь по сфере
Нужна помощь с задачкой:( Яблоко имеет форму идеального шара радиуса R1. В центре яблока находится...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru