Зарегистрировано: 334




Помощь  Карта сайта

О чем пишут?

Простой, незатратный и верный способ победить коррупцию

Победить коррупцию очень просто, было бы желание у тех, кто принимает решения о борьбе с ней. Вот один надежный способ: узаконить доносы. Это незатратный способ. Да, некрасиво, но разве цель не оправдывает средства? А жировать на костях, иметь яхты и футбольные клубы, присваивать ресурсы страны, ..
Дальше..

Я так вижу!

регистратор.png

регистратор.png

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


Тексты. Прозариум

Тексты на сайте могут публиковаться как в составе книг, по которым они "разложены", так и по отдельности. Тексты можно публиковать на странице их владельца, в блогах, клубах или рубриках сайта, а так же в виде статей и объявлений. Вы можете публиковать на сайте не только собственные тексты, но и те, которыми хотите поделиться с читателями, соблюдая авторские права их владельцев.
Prozarium CMS | Реклама, сотрудничество | Разработка, продажа сайтов

Для добавления вашего собственного контента, а также для загрузки текстов целиком, загрузки текстов без разбиения на страницы, загрузки книг без разбиения на тексты, для работы с закладками необходима авторизация. Если вы зарегистрированы на сайте, введите свой логин и пароль. Если нет, пожалуйста, пройдите на регистрацию



Опубликовано в: Клуб: c#
<--Программирование
<--IT Информационные технологии
<--Бизнес по сферам деятельности

0





Алгоритм расчета точки пересечения диагоналей четырехугольника или пересечения прямых
/pterodactilus vulgaris/
16.04.2022


Для нахождения точки пересечения двух прямых создаем систему из двух линейных уравнений на основе уравнения прямой. В качестве исходных параметров выступают 4 известные точки с заданными координатами по X и Y. Начало координат внизу, слева. Точки начинаются от нижнего левого угла и идут по часовой стрелке. Первая прямая задается точками (p0,p2), вторая прямая точками (p1,p3).



точки пересечения двух прямых


Решение этой системы уравнений на C#


using System;
using System.Text;
using System.Drawing;
using System.Configuration;

namespace CrossPoint
{
class Program
{
// решение см. в readme.txt
static void Main(string[] args)
{
StringBuilder sb = new StringBuilder();
PointF[] points = new PointF[4];
string[] coordinates = new string[4] { "4;3", "7;12", "15;13", "19;3" };
sb.Append(ConfigurationManager.AppSettings["i"] + Environment.NewLine);
for (int i=0; i<=3; i++)
{
string[] pntXY = coordinates[i].Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
points[i] = new PointF(float.Parse(pntXY[0]), float.Parse(pntXY[1]));
sb.Append(string.Format("Point {0}({1},{2})", i.ToString(), points[i].X.ToString(), points[i].Y.ToString()) + Environment.NewLine);
}

PointF crossPoint = GetCrossPoint(points);
sb.Append(Environment.NewLine + string.Format("Сrosspoint : {0}; {1}", crossPoint.X, crossPoint.Y));
Console.WriteLine(sb.ToString());
Console.ReadKey();
}

static PointF GetCrossPoint(PointF[] p)
{
float k1 = p[2].X - p[0].X;
float m1 = p[2].Y - p[0].Y;
float n1 = k1 * p[0].Y - m1 * p[0].X;

float k2 = p[3].X - p[1].X;
float m2 = p[3].Y - p[1].Y;
float n2 = k2 * p[1].Y - m2 * p[1].X;

float y = (m2 * n1 - m1 * n2) / (m2 * k1 - m1 * k2);
float x = (k1 * y - n1) / m1;

PointF crossPoint = new PointF(x, y);
return crossPoint;
}
}
}




Описание решения




Уравнения прямой

(1) общий вид (2) для точек p1 и p3 (3) для точек p2 и p4
x -x1 y -y1 x1 -p1.X y1 - p1.Y x2 - p2.X y2 - p2.Y
______ = ______ ___________ = ___________ ___________ = ___________
x2 -x1 y2-y1 p3.X - p1.X p3.Y - p1.Y p4.X - p2.X p4.Y - p2.Y

раскладываем (2) для точек p1 и p3

приводим (2) к виду
(4) m1*x1 - k1*y1 + n1 = 0, где

k1 = p3.X - p1.X
m1 = p3.Y - p1.Y
n1 = k1*p1.Y - m1*p1.X

(5) y1 = (m1*x1 + n1)/k1

для точек p2 и p4 раскладываем (3) по аналогии. для этого заменяем точки p1 на p2, p3 на p4

приводим (3) к виду
(6) m2*x2 - k2*y2 + n2 = 0, где

k2 = p4.X - p2.X
m2 = p4.Y - p2.Y
n2 = k2*p2.Y - m2*p2.X

(7) y2 = (m2*x2 + n2)/k2

выразим x1 через y1 для (5)

k1*y1 - n1
x1 = __________
m1

выразим x2 через y2 для (6)

k2*y2 - n2
x2 = __________
m2

в точке перечечения координаты x и y обеих прямых совпадают. Приравниваем x1 и x2

k1*y1 - n1 k2*y2 - n2
(7) ___________ = ___________
m1 m2

откуда получаем y

m2*n1 - m1*n2
(8) y = _____________
m2*k1 - m1*k2


через подстановку y в (4)

x = (k1*y1 - n1)/m1



(c)03.2020 Eugene Trifonov, aka p.v.

Saint Petersburg, Russia
mailto: pterodactilus@rambler.ru
Skype prozarium
Telegram @EugeneTrifonov

Specialized in C#, ASP.Net, MS SQL
My CV is here