Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Выбрать такие четверки точек, которые лежат в одной плоскости

79K
30 ноября 2013 года
alex7776
13 / / 18.11.2013
В пространстве задано некоторое множество точек. Выбрать из них такие четверки точек, которые лежат в одной плоскости.

Чисто геометрически, понимаю, как это они лежат в одной плоскости, а как это реализовать? И вообще, подкиньте пожалуйста идей по реализации кода.
Спасибо.
79K
01 декабря 2013 года
alex7776
13 / / 18.11.2013
Подкиньте идею хотя бы.
326
01 декабря 2013 года
sadovoya
757 / / 19.11.2005
Любые три точки всегда лежат в одной плоскости. Отдельный случай, когда три точки лежат на одной прямой -- тогда через них бесконечное число плоскостей провести можно. Из трех любых точек получайте уравнение их плоскости. Если другие точки соответствуют этому уравнению, то они в той-же плоскости. Разобравшись с первой тройкой, берите следующую из точек, отличных от тех, что лежали в первой плоскости. И т.д.
79K
01 декабря 2013 года
alex7776
13 / / 18.11.2013
Вот, что я написал. Как доработать?

Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
 
namespace ConsoleApplication1
{   // В пространстве задано некоторое множество точек. Выбрать из них такие четверки точек,
    // которые лежат в одной плоскости.
    class Program
    {
        static int[] x;
        static int[] y;
        static int[] z;
        static int count = 0;
        static void Main(string[] args)
        {
            char[] delimited = new char[] { ' ', ',', '.' };
            string line;
            int i = 0, j, k, n;
           
            double a, b, c, d;
            Console.WriteLine("Введите количество точек на плоскости");
            n = int.Parse(Console.ReadLine());
            x = new int[n];
            y = new int[n];
            z = new int[n];
            using(StreamReader f = new StreamReader("test1.txt"))
            {
                while ((line = f.ReadLine()) != null)
                {
                    Console.WriteLine(line);
                    string[] numbers = line.Split(delimited);
                    x[i] = int.Parse(numbers[0]);
                    y[i] = int.Parse(numbers[1]);
                    z[i] = int.Parse(numbers[2]);
                    i++;
                }
            }
            for (i = 0; i < n - 2; i++)
            {
                for (j = 0; j < n - 2; j++)
                {
                    if (i == j)
                        continue;
                    for (k = 0; k < n - 2; k++)
                    {
                        if ((i == k) || (j == k))
                            continue;
                        a = (y[j]*(z[k+1]-z[k+2]))+(y[j+1]*(z[k+2]-z[k]))+(y[j+2]*(z[k]-z[k+1]));
                        b = (z[k]*(x[i+1]-x[i+2]))+(z[k+1]*(x[i+2]-x[i]))+(z[k+2]*(x[i]-x[i+1]));
                        c = (x[i]*(y[j+1]-y[j+2]))+(x[i+1]*(y[j+2]-y[j]))+(x[i+2]*(y[j]-y[j+1]));
                        d = (x[i]*(y[j+1]*z[k+2]-y[j+2]*z[k+1]))+(x[i+1]*(y[j+2]*z[k]-y[j]*z[k+2]))+(x[i+2]*(y[j]*z[k+1]-y[j+1]*z[k]));
                        if (a*x[i]+b*y[j]+c*z[k]+d == 0)
                        {
                            count ++;
                        }
        }
    }
}
             if (count != 0)
                Console.WriteLine("Количество четверок:{0}", count);
            if (count == 0)
                Console.WriteLine("Четверок нет");
            Console.ReadLine();
        }
    }
}
27K
03 декабря 2013 года
mnanorn
78 / / 01.12.2013
Здравствуйте!

1) Выбираем 4 точки;
2) Выбираем из этих четырех точек три и находим A, B, C уравнения плоскости (см. уравнение плоскости);
3.1) Находим расстояние от четвертой точки до плоскости из трех точек (см. расстояние до плоскости);
3.2) Если расстояние от точки до плоскости равно нулю, точка лежит в плоскости.
или
3.1) Подставляем координаты четвертой точки в уравнение плоскости.
3.2) Если оно верно, точка в плоскости.

На всякий случай: векторное произведение векторов

Удачи!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог