Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/40: Рейтинг темы: голосов - 40, средняя оценка - 4.80
168 / 140 / 23
Регистрация: 02.01.2011
Сообщений: 913

Уравнение для плоскости по координатам 3 точек

08.10.2013, 17:59. Показов 8629. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите, пожалуйста, написать программу на C#, которая по координатам 3-ех точек плоскости (x1,x2,x3, y1,y2,y3,z1,z2,z3) находит коэффициенты A, B, C и D в уравнении плоскости Ax + By + Cz + D = 0. Спасибо!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.10.2013, 17:59
Ответы с готовыми решениями:

Уравнение плоскости, прямой и объём пирамиды для данных точек.
а) Написать уравнение плоскости проходящей через точку D (6;-7;1) параллельно плоскости ABC, где A (-2;-13;15); B (22;-9;-5); C (6;7;-9) ...

Вычислить площадь треугольника по координатам трех точек на плоскости
Пусть даны координаты трех точек на плоскости. Если они могут быть вершинами тупоугольного треугольника,вычислить его площадь. Выведите...

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

9
 Аватар для Serho88
11 / 11 / 8
Регистрация: 08.10.2013
Сообщений: 51
08.10.2013, 23:24
Как вариант можно так (точки не вводятся, а задаются в программе):
Кликните здесь для просмотра всего текста

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
class Program
    {
//класс координат
        class vec
        {
           public int x, y, z;
        }
        static void Main(string[] args)
        {
            vec t1 = new vec();//первая точка
            vec t2 = new vec();//вторая точка
            vec t3 = new vec();//третья точка
//координаты первой точки
            t1.x = 1;
            t1.y=1;
            t1.z=1;
//координаты второй точки
            t2.x=0;
            t2.y=0;
            t2.z=0;
//координаты третьей точки
            t3.x=1;
            t3.y=1;
            t3.z=0;
            int A, B, C, D;
//вычисляются коэффициенты для уравнения плоскости
            A = t1.y*(t2.z - t3.z) + t2.y*(t3.z - t1.z) + t3.y*(t1.z - t2.z); 
            B = t1.z*(t2.x - t3.x) + t2.z*(t3.x - t1.x) + t3.z*(t1.x - t2.x); 
            C = t1.x*(t2.y - t3.y) + t2.x*(t3.y - t1.y) + t2.x*(t1.y - t2.y);
            D =-( t1.x * (t2.y * t3.z - t3.y * t2.z) + t2.x * (t3.y * t1.z - t1.y * t3.z) + t3.x * (t1.y * t2.z - t2.y * t1.z));
//заданных точек и вывод уравнения
            Console.WriteLine("Первая точка: " + t1.x + "," + t1.y + "," + t1.z + "\nВторая точка: " + t2.x + "," + t2.y + "," + t2.z + "\nТретья точка: " + t3.x + "," + t3.y + "," + t3.z + "\nУравнение плоскости: "+A+"x+"+B+"y+"+C+"z+"+D);
//задержка
            Console.ReadKey();
        }
    }
0
168 / 140 / 23
Регистрация: 02.01.2011
Сообщений: 913
09.10.2013, 12:50  [ТС]
Serho88, срасибо! Уже сделала так Координаты точек вводятся в DataGridView, коэффициенты выводятся в TextBox
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
 private void button_Calc_Click(object sender, EventArgs e)
        {
 
 
                        double x1 = Convert.ToDouble(dataGridView1.Rows[0].Cells[1].Value); // 10
                       double y1 = Convert.ToDouble(dataGridView1.Rows[0].Cells[2].Value); //23;
                       double z1 = Convert.ToDouble(dataGridView1.Rows[0].Cells[3].Value); //45;
                       double x2 = Convert.ToDouble(dataGridView1.Rows[1].Cells[1].Value); //1;
                       double y2 = Convert.ToDouble(dataGridView1.Rows[1].Cells[2].Value); //12;
                       double z2 = Convert.ToDouble(dataGridView1.Rows[1].Cells[3].Value); //1;
                       double x3 = Convert.ToDouble(dataGridView1.Rows[2].Cells[1].Value); //2;
                       double y3 = Convert.ToDouble(dataGridView1.Rows[2].Cells[2].Value); //33;
                       double z3 = Convert.ToDouble(dataGridView1.Rows[2].Cells[3].Value); //5;
 
                        double a=0;
                       double b=0;
                       double c=0;
                       double d = 0;
                       SurfaceCalculation(x1, y1, z1, x2, y2, z2, x3, y3, z3,ref a,ref b,ref c,ref d);
            
                    }
 
                    public bool SurfaceCalculation(
                       double x1,
                       double y1,
                       double z1,
                       double x2,
                       double y2,
                       double z2,
                       double x3,
                       double y3,
                       double z3, 
                       ref double a,
                       ref double b,     
                       ref double c ,
                        ref double d    
                        )
 
           
            double k2 = x1 - x2;
            
            if (k2 == 0)
                return false;
          
 
            //-------------------
            a = y1 *(z2 - z3) + y2 *(z3 - z1) + y3* (z1 - z2) ;
            b = z1 *(x2 - x3) + z2 *(x3 - x1) + z3 *(x1 - x2); 
            c = x1 *(y2 - y3) + x2 *(y3 - y1) + x3 *(y1 - y2) ;
            d = -(x1 * (y2 * z3 - y3 * z2) + x2 * (y3 * z1 - y1 * z3) + x3 * (y1 * z2 - y2 * z1));
            //-----------------
 
            textBox1.Text = a.ToString();
            textBox2.Text = b.ToString(); 
            textBox3.Text = c.ToString(); 
            textBox4.Text =d.ToString();
            return true;
        }
Добавлено через 10 часов 16 минут
Подскажите, пожалуйста, какие нужны проверки для ввода координат, какие ограничения? Пока поставила только предупреждение, если введены не все координаты 3 точек, мол, введите координаты всех 3 точек!
Периодически ввожу цифры "с потолка" и не получаю коэффициенты

Добавлено через 30 минут
Поняла, что мне надо поставить ограничение, чтобы все 3 точки не находились на 1 прямой. Как это сделать, а?

Добавлено через 1 час 9 минут
Продолжаю. Нашла следующее -Если три точки A, В и С лежат на одной прямой, то ∆АВС обратится в отрезрк прямой, а потому его площадь должна быть равна нулю:
S=1/2 • [(x1-x3)(y2-y3) - (x2-x3)(y1-y3)]=0.
Но в моем случае, почему то всегда S=0. В чем ошибка?
0
 Аватар для Spectral-Owl
608 / 583 / 157
Регистрация: 29.06.2010
Сообщений: 1,620
09.10.2013, 14:22
Цитата Сообщение от iva_a Посмотреть сообщение
по координатам 3-ех точек плоскости (x1,x2,x3, y1,y2,y3,z1,z2,z3)
или я что-то путаю, или такие координаты избыточны для плоскости, это поверхность.

для поверхности могу выложить проект, который находит находит коэффициенты координаты Z гауссом (минимальные квадраты, всё такое..)

правда там уравнение вида... немножко параболического, если так можно сказать о трёхмерной поверхности.
k[0] + k[1]*x + k[2] *(x^2) + k[3]*y + k[4] *y*x + k[5] *y*(x^2) + k[6] *(y^2) + k[7] *(y^2)*x + k[8] *(y^2)*(x^2);
0
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9674 / 4826 / 763
Регистрация: 17.04.2012
Сообщений: 9,664
Записей в блоге: 14
09.10.2013, 14:36
Возможно я тоже ошибаюсь, но если использовать только 2 точки, можно провести бесконечно много плоскостей:

Плоскости α, β и γ заданы только двумя точками
0
 Аватар для Spectral-Owl
608 / 583 / 157
Регистрация: 29.06.2010
Сообщений: 1,620
09.10.2013, 14:58
оу, простите, каюсь, просто неправильно понял задачу. почему-то решил что необходимо найти коэффициенты точки, а не плоскости, и мысль сразу пошла в другое русло.
Если так - то единственное ограничение, которое я смог придумать - не допустить того чтоб 3 точки лежали на одной прямой

Добавлено через 1 минуту
а, это уже обнаружили)
0
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9674 / 4826 / 763
Регистрация: 17.04.2012
Сообщений: 9,664
Записей в блоге: 14
09.10.2013, 15:10
Цитата Сообщение от iva_a Посмотреть сообщение
Но в моем случае, почему то всегда S=0. В чем ошибка?
Выложите код проверки, предполагаю деление double на int или наоборот. Убедитесь, что все числа в правой части выражения имеют тип double
0
 Аватар для Spectral-Owl
608 / 583 / 157
Регистрация: 29.06.2010
Сообщений: 1,620
09.10.2013, 15:13
поподбирал координаты трёх точек на прямой, получил результат:
(((x1+y1)/z1 == (x2+y2)/z2)) && ((x1+y1)/z1==(x3+y3)/z3))

проверил на корректность: сработало в двух случаях из двух. Но при любом z, равным нулю - не сработает.

Добавлено через 1 минуту
Цитата Сообщение от iva_a Посмотреть сообщение
S=1/2 • [(x1-x3)(y2-y3) - (x2-x3)(y1-y3)]=0.
Но в моем случае, почему то всегда S=0. В чем ошибка?
я надеюсь это не прямое копирование кода из проекта? а то здесь просто присваивание нулю последним действием идёт.
0
168 / 140 / 23
Регистрация: 02.01.2011
Сообщений: 913
09.10.2013, 15:31  [ТС]
Spectral-Owl,нет, нет, 0 в конце - это я ошиблась Просто, если S=0, то точки принадлежат 1 прямой
0
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9674 / 4826 / 763
Регистрация: 17.04.2012
Сообщений: 9,664
Записей в блоге: 14
09.10.2013, 15:34
iva_a, так вы выложите ваш код проверки?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.10.2013, 15:34
Помогаю со студенческими работами здесь

По заданным координатам точек на плоскости найти треугольник с минимальным периметром
Your a given coordinates of N points on the XY-plane.All points are different.Find the triangle with minimum possible perimeter. ...

По введенным координатам 3 точек на плоскости вычислить определить соответствующий треугольник
По введенным координатам 3 точек на плоскости вычислить определить соответствующий треугольник (если это возможно), вычислив величины его...

По координатам трех точек на плоскости определить, лежат ли они на одной прямой
По координатам трех точек на плоскости определить, лежат ли они на одной прямой.

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

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


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru