Главная страница


ru.algorithms

 
 - RU.ALGORITHMS ----------------------------------------------------------------
 From : FAQ Robot                            2:5015/185     21 Apr 2002  23:37:56
 To : All
 Subject : [1/4] FAQ по геометрии.
 -------------------------------------------------------------------------------- 
 
 _1.1.1 Intro._
 
   В данной части  FAQ'а рассматриваются два векторных пространства E^2 -
 плоскость, и E^3 -  трехмерное пространство. В E^2 вектор задается двумя 
 координатами {x,y}. В E^3 тремя {x,y,z}.
 
 _1.1.2 Действия над векторами._
 
   В E^2: 
    Сложение {x1,y1}+{x2,y2}={x1+x2,y1+y2}
    Умножение на число a*{x,y}={a*x,a*y}
   В E^3:
    Сложение {x1,y1,z1}+{x2,y2,z2}={x1+x2,y1+y2,z1+z2}
    Умножение на число a*{x,y,z}={a*x,a*y,a*z}
 
 _1.1.3 Скалярное произведение._
 
   Скалярное  произведение векторов *a* и *b* обозначается так ( *a*,*b* ),
 и является числом. 
   Геометрическое определение:( *a*,*b* )=| *a* |*| *b* |*cos( *a* ^ *b* ), 
 где *a* ^ *b* - угол между векторами a и b.
   В E^2: ({x1,y1},{x2,y2})=x1*x2+y1*y2. 
   В E^3: ({x1,y1,z1},{x2,y2,z2})=x1*x2+y1*y2+z1*z2.
 
 _1.1.4 Векторное произведение._
 
   Векторное произведение векторов a и b обозначается так [a,b], и
 является вектором.
   Геометрическое определение. с = [a,b] - вектор заданный как:
     1) | *c* |=| *a* |*| *b* |*|sin( *a* ^ *b* )|
     2) с ортогонален a, с ортогонален b.
     3) a,b,c - правая тройка.
   В E^2:  отсутвует,  говорить о числе r = x1*y2-x2*y1,  при чем |r|=| *c* |, 
 и r < 0, если *a* ^ *b* больше pi, и r > 0 в противном случае, при r = 0, век-
 тора коллинеарны. r так больше pi, и r>же называется ориентированной площадью 
 параллелограмма построенного на векторах a и b.
   В E^3: [{x1,y1,z1},{x2,y2,z2}] = {x3,y3,z3}, где 
   x3 = y1*z2-y2*z1, 
   y3 = z1*x2-z2*x1, 
   z3 = x1*y2-x2*y1. Что гораздо проще запомнить как 
   |i  j  k |
   |x1 y1 z1|
   |x2 y2 z2|, где i,j,k - базис, т.е. {x,y,z} = x*i+y*j+z*k.
 
 _1.1.5 Смешанное произведение векторов._
 
   Смешанное произведение векторов a,b,c обозначается так (*a*,b,*c*).
   Определение ( *a*,b,*c* )=( *[a,b]*,*c* ). 
   В E^2: отсутствует.
                                               |x1 y1 z1|
   В E^3: ({x1,y1,z1},{x2,y2,z2},{x3,y3,z3}) = |x2 y2 z2|
                                               |x3 y3 z3|.
   При чем СВП равно ориентированному объему параллепипеда построенного на 
 векторах a, b, c, т.е. равна объему(V) параллепипеда когда a,b,c - правая 
 тройка, и -V,  если a,b,c -левая тройка, если (*a*,b,*c*) = 0, то вектора 
 a,b,c - копланарны.
 
 *1.2 Аналитическая геометрия на плоскости.*
 
 _1.2.1 Основные формулы в Декартовой системе координат._
 
 P1(x1, y1), P2(x2, y2), P3(x3, y3), P4(x4, y4)
 
  - Расстояние:         
      d(P1, P2) = sqrt((x1-x2)^2 + (y1-y2)^2)
      
  - Угол между двумя веторами P1P2 P3P4:                
  
                 (x2-x1)(x4-x3) + (y2-y1)(y4-y3)       (P1P2, P3P4)
      cos(al) = --------------------------------- = -------------------
                       d(P1, P2)*d(P3, P4)          d(P1, P2)*d(P3, P4)
                       
                 (x2-x1)(y4-y3) - (x4-x3)(y2-y1)       [P1P2, P3P4]
      sin(al) = --------------------------------- = ------------------
                       d(P1, P2)*d(P3, P4)          d(P1, P2)*d(P3, P4)
                       
                 (x2-x1)(y4-y3) - (x4-x3)(y2-y1)       [P1P2, P3P4]
      tg (al) = --------------------------------- = ------------------
                 (x2-x1)(x4-x3) + (y2-y1)(y4-y3)       (P1P2, P3P4)
                 
  - Координаты x, y точки P, делящей P1P2 в отношении m/n = p/1
 
       mx2 + nx1    x1 + qx2
   x = --------- = ---------;
         n + m       1 + p
       my2 + ny1    x1 + qx2  
   y = --------- = ---------;
         m + n       1 + p             
         
  - Соответственно, если P - середина (n=m), то
       x2 + x1        y2 + y1      
   x = -------;   y = -------;
          2              2
          
  - Ориентированная площадь S треугольника с вершинами P1, P2, P3:         
          | x1  y1  1 | 
  S = 1/2 | x2  y2  1 | = 1/2*[x1(y2-y3)+x2(y3-y1)+x3(y1-y2)]
          | x3  y3  1 |          
          
  - Площадь положительна, если направление обхода P1P2P3 совпадает с
 положительным  
  (против часовой стрелки) направлением врашения.
 _1.2.2 Перенос и поворот координат._
 
  - Пусть начало координат системы Ox1y1 не совпадает с Oxy и угол xOx1 равен
 T, то:  
  / x' = (x-x1)cosT + (y-y1)sinT  
  \ y' =-(x-x1)sinT + (y-y1)cosT
 _1.2.3 Уравнения прямой линии._
 
  - Каноническое уравнение:  Ax + By + C = 0, где A^2 + B^2 <> 0   
  
  - Уравнение с угловым коэффициентом:  y = kx + b, k = tg(alpha)   
  
  - Уравнение прямой, проходящей через две не совпадаюшие точки (x1, y1) и (x2,
 y2)   
       y - y1    x - x1      | x  y  1 |
      ------- = ------- или  | x1 y1 1 | = 0  
      y2 - y1   x2 - x1      | x2 y2 1 |   
      
  - Параметрическое задание прямой:   
  / x = x0 + at   
  \ y = y0 + bt, где t - параметр.      
  
  - Параметрическое через две точки
 /x=x1(1-t)+x2*t
 \y=y1(1-t)+y2*t,  
 _1.2.4 Взаимое расположение точек и прямых._
 
  *Точки и прямые.*
 
  - Расстояние от точки P(x0, y0) до прямой Ax+By+C=0 находиться по формуле:
        |Ax0 + By0 + C|
   S = -----------------         
        sqrt(A^2 + B^2)       
        
  - Три точки лежат на одной прямой, если   
  | x1 y1 1 |   
  | x2 y2 1 | = 0   
  | x3 y3 1 |
 
  *Две прямые:*
 
  A1x + B1y + C1 = 0  A2x + B2y + C2 = 0  
  
   - Пересекаются в точке:       
       B1C2 - B2C1       C1A2 - C2A1   
   x = -----------;  y = -----------       
       A1B2 - A2B2       A1B2 - A2B1         
       
   - Угол между ними:          
                A1B2 - A2B1
    tg(alpha )= -----------          
                A1A2 + B1B2            
                
   - Прямые параллельны, если A1B1 - A2B1 = 0    
   
   - Прямые перпендикулярны, если A1A2 + B1B2 = 0
   
   - Уравнение нормали к прямой, проходящей через точку (x1, y1):  
   A1(y - y1) =  B1(x - x1)    
   
   - Уравнение параллельной:   A1x + B1y + C = 0     
   
   - Расстояние между параллельными:
          C1                 C2
   S= --------------- - ---------------
      sqrt(A1^2+B1^2)   sqrt(A2^2+B2^2)
      
   - Для того что бы три прямые пересекались в одной точке необходимо и
 достаточно:  
   | A1 B1 C1 |  
   | A2 B2 C2 | = 0  
   | A3 B3 C3 |
   
   
 _1.2.5 Окружность._
 
  - Уравнение окружности с радиусом R и центром в (x0, y0):
    (x-x0)^2 + (y-y0)^2 = R^2
   или
    / x = x0 + R*cos(t)
    \ y = y0 + R*sin(t), где -pi <= t <= pi
   или
    x^2 + y^2 + Ax + By + C = 0
     
  - Уравнение касательной в точке (x1, y1) к окружности с центром в начале
 координат
    y - y1   -x1y1 _+_ R*sqrt(x1^2 + y1^2 - R^2)
    ------ = ----------------------------------
    x - x1              R^2 - x1^2
    
    Также уравнение касательной можно искать из условия, что в уравнении:
    _+_ sqrt(R^2-(x-x0)^2) + y0 = kx + b
    дискриминант = 0
    
  - Уравнение касательной, имеющей заданный угловой коэффициент k:
    y = kx _+_ R*sqrt(1+ k^2)
    
  - Уравнение нормали к кривой в точке (x1, y1):
    y = (y1/x1)*x
    
  - Уравнение окружности, проходящей через три точки (x1, y1), (x2, y2) и (x3,
 y3)
    |  x^2 + y^2   x   y   1 |
    | x1^2 + y1^2  x1  y1  1 | = 0
    | x2^2 + y2^2  x2  y2  1 |
    | x3^2 + y3^2  x3  y3  1 |
    
  - Длина L каждой из касательных, проведённых из точки (x1, y1) к окружности
    L = sqrt((x1-x0)^2 + (y1-y0)^2 - R^2)
 *1.3 Hекоторая особенность программирования.*
 
 В программах, решающих геометрические задачи, обычно используются вещественные
 числа. При проведении с ними операций необходимо учитывать погрешность вычисле-
 ний, вызванную накоплением ошибок в последних разрядах. Это приводит к тому, 
 что вещественные числа, как правило, нельзя сравнивать обычным образом - их 
 нужно сравнивать с какой-то заданной точностью eps. Hапример, для выяснения,
 равно ли вещественное число a нулю вместо условия a=0 следует записать 
 abs(a)<eps. Вот об этом мы и поговорим в этой части FAQ'а.
 
 _1.3.1. Зачем это надо?_
 
 Могу привести небольшой пример, специально написанный под этот случай. Имеются
 два отрезка, отрезки выбраны случайно, но так что бы точка их пересечения была
 фиксированной.  Вот этот фрагмент кода стоит в конце программы, после того как
 точка пересечения восстановлена по координатам концов отрезков. 
   writeln(p.x,#32,p.y); {p - заданная точка пересечения}
   writeln(r.x,#32,r.y); {r - рассчитанная точка пересечения}
   writeln((r.x=p.x)and(r.y=p.y));
 Получается довольно интересный вывод, у меня:
  5.00000000000000E+0000  2.00000000000000E+0000
  5.00000000000000E+0000  2.00000000000000E+0000
 FALSE
 Я думаю, комментарии излишни.
 
 _1.3.2. Как правильно организовать сравнение?_
 
 a)      a=b -> abs(a-b)<eps
 b)      a<>b -> abs(a-b)>eps
 c)      a<b -> a<b
 d)      a<=b -> a-b<eps
 e)      a>b -> a>b
 f)      a>=b -> b-a>eps
 
 _1.3.3. Как выбирать eps?_
 
     Обычно в условии говорится, с какой точность должен быть выдан результат.
 Тогда в качестве eps можно взять число в 100, или 1000 раз меньшее. Hапример, 
 если  надо  выдать результат с точностью четыре знака после десятичной точки, 
 то я беру eps  равным  1e-6. Вообще если eps не влияет на производительность, 
 то лучше брать число поменьше.
 
 --- FIDOGATE 4.4.3-snp19beta4
  * Origin: DO THE SKA! (2:5015/185)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 [1/4] FAQ по геометрии.   FAQ Robot   21 Apr 2002 23:37:56 
Архивное /ru.algorithms/472929f0da7a7.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional