Уроки, алгоритмы, программы, примеры

Материалы по разделам

Построения
на плоскости (2D)
Графика
в пространстве (3D)
Вычислительная
геометрия
Физическое
моделирование
Фрактальная
графика

Новые комментарии

У меня проблема вот с этим: gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);. Вылезает ошибка: CS1061 "object" не содержит определения "GL_COLOR_BUFFER_BIT", и не удалось найти доступный метод расширения "GL_COLOR_BUFFER_BIT",...
Большое спасибо. Единственный код который прошел без каких либо ошибок. Ура!!!
Скажите пожалуйста, подскажите алгоритм по которому по заданным точкам можно определить тип многогранника, скажем это куб или прямоугольный параллелепипед. Нашел теорию по этим фигурам: https://www.mat... https://www.mat... Акцентировать внимание...
Всем у кого не работает. файл wizard.script Ещё одно упоминание Glut32 в строке "if (!VerifyLibFile(dir_nomacro_lib, _T("glut32"), _T("GLUT's"))) return false;" меняем на "if (!VerifyLibFile(dir_nomacro_lib, _T("freeglut"), _T("GLUT's"))) return...
Не получается, емаё

Счетчики и рейтинг

Рейтинг@Mail.ru Яндекс.Метрика
Скриншот к примеру
Среда программирования: 
Visual Studio 2013

Определяем точку пресечения двух отрезков, используя свойства векторного произведения (функции areCrossing и vector_mult). Далее, если функция areCrossing возвращает истину, значит отрезки пересекаются, тогда мы начинаем построение уравнений прямых, соответствующих данным отрезкам (функция LineEquation), и находим точку пересечения отрезков (функция CrossingPoint). Иначе (если функция areCrossing возвращает ложь, т.е. отрезки не пересекаются), выводим сообщение: "Отрезки не пересекаются!".

Код программы: 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace Otrezki
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            }
        Point p1, p2, p3, p4, p;
 
        private void button1_Click(object sender, EventArgs e)//кнопка "новая пара отрезков" - очищение экрана и обнуление входных параметров
        {
            textBox1.Text = "0";
            textBox2.Text = "0";
            textBox3.Text = "0";
            textBox4.Text = "0";
            textBox5.Text = "0";
            textBox6.Text = "0";
            textBox7.Text = "0";
            textBox8.Text = "0";
            label1.Text = "";
            pictureBox1.Image = null;
        }
         private int vector_mult(int ax,int ay,int bx,int by) //векторное произведение
         {
            return ax*by-bx*ay;
         }
         public bool areCrossing(Point p1, Point p2, Point p3, Point p4)//проверка пересечения
        {                                                       
          int v1 = vector_mult(p4.X - p3.X, p4.Y - p3.Y, p1.X - p3.X, p1.Y - p3.Y);
          int v2 = vector_mult(p4.X - p3.X, p4.Y - p3.Y, p2.X - p3.X, p2.Y - p3.Y);
          int v3 = vector_mult(p2.X - p1.X, p2.Y - p1.Y, p3.X - p1.X, p3.Y - p1.Y);
          int v4 = vector_mult(p2.X - p1.X, p2.Y - p1.Y, p4.X - p1.X, p4.Y - p1.Y);
          if ( (v1*v2)<0 && (v3*v4)<0 )
            return true;
          return false;
        }
 
        //построение уравнения прямой
        int A, B, C;//коэффициенты уравнения прямой вида: Ax+By+C=0
        public void LineEquation(Point p1,Point p2)
            {                                                             
                A=p2.Y-p1.Y;                                            
                B=p1.X-p2.X;
                C=-p1.X*(p2.Y-p1.Y)+p1.Y*(p2.X-p1.X);
            } 
        //поиск точки пересечения
        Point CrossingPoint(int a1,int b1,int c1,int a2,int b2,int c2)
        {
 
          Point pt=new Point();                         
          double d=(double)(a1*b2-b1*a2);
          double dx=(double)(-c1*b2+b1*c2);
          double dy=(double)(-a1*c2+c1*a2);
          pt.X=(int)(dx/d);
          pt.Y=(int)(dy/d);
          return pt;
        }
        private void button2_Click(object sender, EventArgs e)
        {
           //получаем входные данные
            p1 = new Point(Convert.ToInt32(textBox1.Text), Convert.ToInt32(textBox2.Text));
            p2 = new Point(Convert.ToInt32(textBox3.Text), Convert.ToInt32(textBox4.Text));
            p3 = new Point(Convert.ToInt32(textBox5.Text), Convert.ToInt32(textBox6.Text));
            p4 = new Point(Convert.ToInt32(textBox7.Text), Convert.ToInt32(textBox8.Text));
            //строим отрезки
            Graphics g = pictureBox1.CreateGraphics();
            g.DrawLine(new Pen(Color.Black, 2), p1, p2);
            g.DrawLine(new Pen(Color.Black, 2), p3, p4);
            label1.Text = "";     
            //проверяем отрезки на пересечение
            if (areCrossing(p1, p2, p3, p4))
            {
                int a1, b1, c1, a2, b2, c2;
                LineEquation(p1, p2);
                a1 = A; b1 = B; c1 = C;
                LineEquation(p3, p4);
                a2 = A; b2 = B; c2 = C;
                p = CrossingPoint(a1, b1, c1, a2, b2, c2);
                label1.Text = "Отрезки пересекаются" + "\n" + "в точке(" + Convert.ToString(p.X) + "," + Convert.ToString(p.Y) + ")";
            }
            else
                label1.Text = "Отрезки"+"\n" + "не пересекаются!";
        }
    }
}

Прикрепленный файлРазмер
pashaeva_peresechenie_otrezkov.zip59.53 кб