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

Построить квадрат по двум заданным точкам

18.09.2014, 00:23. Показов 8916. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
подскажите ,пожалуйста,как построить квадрат по двум заданым смежным вершынам?

вот мои попытки

C#
1
2
3
4
5
6
7
8
 var AE = b.Y -a.Y;
            var BE = -(b.X-a.X);
            var CE = -(a.X*b.Y-a.Y*b.X);
 
            var xleftDown = (AE * (side - CE - BE * a.Y) + BE * BE * a.X) / (Math.Pow(AE, 2) + Math.Pow(BE, 2));
            var yleftDown = (AE * a.Y - BE * a.X + BE * xleftDown) / AE;
            var xrightDown = (AE * (side - CE - BE * b.Y) + BE * BE * b.X) / (Math.Pow(AE, 2) + Math.Pow(BE, 2));
            var yrightDown = (AE * b.Y - BE * b.X + BE * xrightDown) / AE;
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.09.2014, 00:23
Ответы с готовыми решениями:

Построить правильные N - угольники по двум точкам
Написать программу, которая строит правильные N-угольники по двум точкам: указываем центр,...

Построить квадрат по четырем точкам
Graphics gra = graf.CreateGraphics(); Pen grid = new Pen(new SolidBrush(Color.Red),...

Построить прямоугольник по двум заданным точкам
Помогите сделать до конца задачу на СИ.! 1)Построить прямоугольник по двум заданным точкам:...

Построить прямоугольник по двум заданным точкам
Построить прямоугольник по двум заданным точкам: левому верхнему и правому нижнему углам. Обе точки...

8
8942 / 4854 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
18.09.2014, 00:37 2
Стороны параллельны координатным осям?
0
0 / 0 / 0
Регистрация: 10.01.2013
Сообщений: 59
18.09.2014, 03:14  [ТС] 3
Не обязаьельно две точки вводятся вручную значит могут любие
0
8942 / 4854 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
18.09.2014, 09:01 4
Неохота заморачиваться с уравнениями, поэтому пойдём другим путём: построим прямоугольник и повернём на заданный угол:
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
/// <summary>
/// Функция вычисления вершин квадрата по двум смежным вершинам
/// </summary>
/// <param name="pt1">Первая вершина</param>
/// <param name="pt2">Вторая вершина</param>
/// <returns>Функция возвращает массив точек, являющихся вершинами квадрата</returns>
PointF[] GetSquareVertices(PointF pt1, PointF pt2) {
    using (System.Drawing.Drawing2D.GraphicsPath square = new System.Drawing.Drawing2D.GraphicsPath()) {
        //Разность координат (с учётом знака)
        float deltaX = pt1.X - pt2.X, deltaY = pt1.Y - pt2.Y;
        //Расстояние между точками
        float dist = (float)Math.Sqrt(Math.Pow(deltaX, 2) + Math.Pow(deltaY, 2));
        //Угол наклона стороны
        double angle;
        //Прямоугольник с вычисленной длиной стороны
        square.AddRectangle(RectangleF.FromLTRB(0, 0, dist, dist));
        //Вычисление угла поворота
        angle = Math.Atan(deltaY / deltaX);
        //Функция Math.Atan возвращает угол в пределах [-PI/2;PI/2], а для поворота нужен угол [0;2PI]. 
        //Для пересчёта смотрим знак разности координат.
        //Квадранты считаются с правого нижнего против часовой стрелки.
        //Первый квадрант [0;PI/2) получается сам собой при вычислении арктангенса
        if ((deltaX > 0 && deltaY <= 0) ||(deltaX >= 0 && deltaY > 0)) {//Второй квадрант [PI/2;PI) или третий квадрант [PI;3PI/2)
            angle = Math.PI + angle;
        }
        else if (deltaX <= 0 && deltaY > 0) {//Четвёртый квадрант [3PI/2;2PI)
            angle = 2 * Math.PI + angle;
        }
        //Перевод угла из радиан в градусы
        angle *= 180 / Math.PI;
        //Перенос начала координат в первую точку и
        //поворот прямоугольника на вычисленный угол относительно этого нового начала координат
        using (System.Drawing.Drawing2D.Matrix m = new System.Drawing.Drawing2D.Matrix(1, 0, 0, 1, pt.X, pt.Y)) {
            m.RotateAt((float)angle, new PointF());
            square.Transform(m);
        }
        return square.PathPoints;
    }
}
Миниатюры
Построить квадрат по двум заданным точкам  
1
0 / 0 / 0
Регистрация: 10.01.2013
Сообщений: 59
18.09.2014, 11:27  [ТС] 5
спасибо, но насколько я понял специфику даной лабораторной работы мне пока нельзя использовать такие фишки как матрица поворота(если я правильно понял, то именно она здесь и была применена)

полностью задание звучит так

10. Відобразити координатну сітку (горизонтальну та вертикальну) з осями, підписами та напрямними стрілками (центр осей в центрі Canvas). Забезпечити побудову квадратів за заданими координатами двох вершин (верхніх лівої та правої) із автоматичною побудовою внутрішніх квадратів, що мають вершини у центрі кожної із сторін заданого квадрата. Заливка обох квадратів – різна (одна визначена користувачем, інша – випадковим чином).
если нужно я могу перевести.

мне нужно просто определить точки двух других вершин. Строить их я буду банальным DrawPolygon.
0
8942 / 4854 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
18.09.2014, 11:49 6
В задании нужно построить два квадрата.
Если бы было оговорено, что нужно построить квадрат аналитическим способом, решая уравнения прямых, тогда не подходит. Но написано "забезпечити", а уж как ты это обеспечишь — твоё дело
Цитата Сообщение от fakelessjohny Посмотреть сообщение
мне пока нельзя использовать такие фишки как матрица поворота
Вот не понимаю я этих требований. Можно использовать всё, что предоставляет язык.
0
0 / 0 / 0
Регистрация: 10.01.2013
Сообщений: 59
18.09.2014, 18:08  [ТС] 7
там просто в нескольких следующих лабораторных должны будут использоватся такие технологии.
уже все решыл аналитическим способом.
но за помощь, спасибо.
0
8942 / 4854 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
18.09.2014, 20:28 8
Решил аналитически - молодец. Дай решение другим. Заодно посмотрим как ты решил. Там делов-то на три формулы
0
0 / 0 / 0
Регистрация: 10.01.2013
Сообщений: 59
18.09.2014, 23:00  [ТС] 9
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
private double SquareSide
     {
         get { return Math.Pow(_b.X - _a.X, 2) + Math.Pow(_b.Y - _a.Y, 2); }
     }
 
public void DoCalculate()
        {
            double side = SquareSide;
            //коефіцієнти рівняння загального
            int ae = _b.Y - _a.Y;
            int be = -(_b.X - _a.X);
            int ce = -(_a.X*_b.Y - _a.Y*_b.X);
 
            var xleftDown = (int) ((ae*(side - ce - be*_a.Y) + be*be*_a.X)/(Math.Pow(ae, 2) + Math.Pow(be, 2)));
            int yleftDown = (ae*_a.Y - be*_a.X + be*xleftDown)/ae;
            var xrightDown = (int) ((ae*(side - ce - be*_b.Y) + be*be*_b.X)/(Math.Pow(ae, 2) + Math.Pow(be, 2)));
            int yrightDown = (ae*_b.Y - be*_b.X + be*xrightDown)/ae;
 
//результати 
            _d = new Point(xleftDown, yleftDown);
            _c = new Point(xrightDown, yrightDown);
        }
    }
0
18.09.2014, 23:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.09.2014, 23:00
Помогаю со студенческими работами здесь

Квадрат по двум точкам
Необходимо построить максимальный квадрат по двум точкам без поворотов с неихменной первой тчокой.,...

Построить четырехугольник по заданным точкам
Есть задача: даны (четыре) точки пересечения со сторонами четырехугольника перпендикуляров,...

Определить функцию, позволяющую построить уравнение прямой по двум точкам
Определить функцию, позволяющую построить уравнение прямой по двум точкам. как это вообще? :(

Как построить сплайн по заданным точкам
Всем добрый день. У меня возникла такая проблема. Имеется одномерный массив состоящий из чисел:...


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

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