복잡한 도면의 점을 그래픽으로 표시합니다.

다음 그림을 고려하십시오.

y = x^3 - 3*x^2 함수의 그래프를 보여줍니다. 점 x = 0을 포함하는 일부 간격(예: -1에서 1까지)을 고려합니다. 이러한 간격을 점 x = 0의 이웃이라고도 합니다. 그래프에서 볼 수 있듯이 이 이웃에서 함수 y = x^ 3 - 3*x^2 소요 가장 높은 가치정확히 x = 0 지점에서.

함수의 최대값과 최소값

이 때 x = 0인 점을 함수의 최대점이라고 합니다. 이와 유추하여 점 x = 2를 함수 y = x^3 - 3*x^2의 최소점이라고 합니다. 이 지점의 값이 이 이웃의 다른 모든 값 중에서 최소가 되는 그런 이웃이 있기 때문입니다.

최고함수 f(x)는 점 x0이라고 하며, 이 이웃의 x0과 같지 않은 모든 x에 대해 부등식 f(x)가 되도록 점 x0의 이웃이 있는 경우< f(x0).

최저한의함수 f(x)는 점 x0이라고 하며, 이 이웃에서 x0과 같지 않은 모든 x에 대해 부등식 f(x) > f(x0)가 충족되는 점 x0의 이웃이 있는 경우.

함수의 최대 및 최소 지점에서 함수의 미분 값은 0과 같습니다. 그러나 이것은 최대 또는 최소 지점에서 함수가 존재하기 위한 충분 조건이 아닙니다.

예를 들어, x = 0 지점에서 함수 y = x^3은 0과 같은 도함수를 갖습니다. 그러나 점 x = 0은 함수의 최소 또는 최대 점이 아닙니다. 아시다시피 함수 y = x^3은 전체 실제 축에서 증가합니다.

따라서 최소 및 최대 점은 항상 방정식 f'(x) = 0의 근에 있습니다. 그러나 이 방정식의 모든 근이 최대 또는 최소 점이 되는 것은 아닙니다.

정지점 및 임계점

함수의 도함수 값이 0과 같은 점을 정지점이라고 합니다. 함수의 도함수가 전혀 존재하지 않는 지점에서 최대 또는 최소 지점이 있을 수도 있습니다. 예를 들어, y = |x| x = 0 지점에서 최소값이 있지만 이 지점에서는 도함수가 존재하지 않습니다. 이 지점이 함수의 임계점이 됩니다.

함수의 임계점은 도함수가 0과 같거나 이 지점에서 도함수가 존재하지 않는 지점, 즉 이 지점에서 함수가 미분할 수 없는 지점입니다. 함수의 최대값 또는 최소값을 찾으려면 충분 조건이 충족되어야 합니다.

f(x)를 구간(a;b)에서 미분할 수 있는 함수라고 합시다. 점 x0은 이 구간에 속하고 f'(x0) = 0입니다. 그러면:

1. 정지점 x0을 지날 때 함수 f(x)와 그 도함수의 부호가 "플러스"에서 "마이너스"로 변경되면 포인트 x0은 함수의 최대 포인트입니다.

2. 정지점 x0을 지날 때 함수 f(x)와 그 도함수의 부호가 "빼기"에서 "플러스"로 변경되면 점 x0은 함수의 최소점입니다.

모든 Habr 사람들에게 안녕하세요. 나는 우리의 이해에서 삶과 거리가 멀고 건조할 때 친애하는 독자들에게 예를 제시하고 싶습니다. 고등 수학좋은 실용적인 결과를 얻었습니다.

먼저 약간의 추억
제가 90년대에 공과대학에 재학 중이었을 때, 아마도 2학년이었을 것입니다. 나는 어떻게 든 프로그래밍에서 올림피아드에 도착했습니다. 그리고 바로 이 올림피아드에서 삼각형의 좌표를 설정하고 평면의 테스트 지점을 설정하고 이 지점이 삼각형 영역에 속하는지 여부를 결정하는 작업이 있었습니다. 일반적으로 사소한 문제이지만 해결하지 못했습니다. 그러나 그 다음에는 매립지에 속하는 보다 일반적인 작업에 대해 생각했습니다. 반복합니다. 90년대 중반이었고 인터넷도 없었고 컴퓨터 기하학에 관한 책도 없었지만 터보 파스칼이 있는 타워와 실험실 286에 대한 강의가 있었습니다. 그래서 별들이 일치했고, 내가 그 문제에 대해 생각하고 있을 때 그들은 탑에서 우리에게 복잡한 변수의 이론을 읽고 있었습니다. 그리고 하나의 공식(아래에서 이에 대해)이 비옥한 땅에 떨어졌습니다. 알고리즘은 Pascal에서 발명되고 구현되었습니다(불행히도 제 1.5기가바이트 나사가 죽고 이 코드와 다른 어린 시절 개발을 망각으로 가져갔습니다). 연구소를 마치고 한 연구소에서 일하게 되었습니다. 그곳에서 나는 연구소 직원들의 필요에 따라 GIS 개발을 처리해야 했고, 내 자신의 임무 중 하나는 물체가 윤곽선에 떨어지는지 확인하는 것이었습니다. 알고리즘은 C++로 다시 작성되었으며 작업에서 우수한 것으로 입증되었습니다.

알고리즘 작업

주어진:
Г - 꼭짓점 좌표(xi, yi)와 테스트 지점 좌표(x0, y0)로 주어진 평면의 닫힌 폴리라인(이하 다각형이라고 함)
정의하다:
점이 폴리곤으로 둘러싸인 영역 D에 속하는지 여부.

알고리즘의 후속 작성을 위한 공식 유도는 수학적으로 완전하고 정확하다고 주장하는 것이 아니라 과학 분야의 여왕에게 엔지니어링(소비자 접근 방식)을 보여줍니다.

노동자-농민 공학 관점에서의 설명:
- 경계 G는 우리의 주어진 윤곽이고,
- z0 - 테스트 포인트
- f(z) - 복잡한 기능복잡한 인수에서 등고선의 어느 곳에서도 무한대로 이동하지 않습니다.

즉, 점이 윤곽에 속하는지 여부를 설정하려면 적분을 계산하고 주어진 점에서 함수 값과 비교해야 합니다. 일치하면 점이 윤곽선에 있습니다. 참고: Cauchy의 적분 정리에 따르면 점이 윤곽선에 있지 않으면 피적분 함수는 절대 무한대로 가지 않고 적분은 . 이것은 문제를 단순화합니다. 적분을 계산하고 0과 같은지 확인하기만 하면 됩니다. 점은 윤곽선이 0과 같지 않고 다릅니다. 윤곽선에 있습니다.
적분 계산을 해보자. f(z)에 대해 간단한 기능 1. 일반성을 잃지 않고 점 0을 z0으로 사용할 수 있습니다(항상 좌표를 이동할 수 있음).

피적분의 분모에서 허수 단위를 제거하고 적분을 실수 부분과 허수 부분으로 나눕니다.

우리는 두 번째 종류의 두 곡선 적분을 얻었습니다.
첫 번째 계산

적분이 경로에 의존하지 않는다는 조건이 충족되므로 첫 번째 적분은 0과 같으므로 계산할 필요가 없습니다.

허수 부분에서는 이 트릭이 작동하지 않습니다. 경계가 선분으로 구성되어 있음을 기억하십시오. 다음을 얻습니다.

여기서 Гi는 세그먼트 (xi,yi)- (xi+1,y i+1)
i번째 적분을 계산해 봅시다. 이를 위해 i 번째 세그먼트의 방정식을 매개 변수 형식으로 작성합니다.

적분에 대입

그리고 번거롭고 지루한 변환 후에 다음과 같은 매력적인 공식을 얻습니다.

마침내 우리는 얻는다

C++의 알고리즘:

주형 <수업티>
부울 pt_in_polygon( 상수 T &test, const std::vector &polygon)
{
if (polygon.size()<3) return false;

Std::vector::const_iterator end=polygon.end();

T last_pt=polygon.back();

Last_pt.x-=test.x;
last_pt.y-=test.y;

더블합계=0.0;

~을 위한(
std::vector::const_iterator iter=polygon.begin();
반복!=끝;
++이터
{
T cur_pt=*iter;
cur_pt.x-=test.x;
cur_pt.y-=test.y;

더블 del= last_pt.x*cur_pt.y-cur_pt.x*last_pt.y;
더블 xy= cur_pt.x*last_pt.x+cur_pt.y*last_pt.y;

합계+=
atan((last_pt.x*last_pt.x+last_pt.y*last_pt.y - xy)/del)+
atan((cur_pt.x*cur_pt.x+cur_pt.y*cur_pt.y-xy)/del)
);

last_pt=cur_pt;

반품팹(합)>eps;

T - 포인트 유형, 예:
구조체포인트 D
{
이중 x,y;
};

제어:
왼쪽 클릭 - 새 윤곽점 추가
오른쪽 버튼 - 윤곽선 닫기
Shift 키를 누른 상태에서 왼쪽 - 테스트 포인트 이동

관심있는 여러분, 더 빠른 알고리즘을 제공합니다. 더 이상 내 것이 아닙니다.
기사에 특별한 감사를 드립니다.
템플릿 bool pt_in_polygon2(const T &test, const std::vector &polygon)
{

정적 const int q_patt= ( (0,1), (3,2) );

If(polygon.size()<3) return false;

Std::vector::const_iterator end=polygon.end();
T pred_pt=polygon.back();
예측_pt.x-=테스트.x;
pred_pt.y-=test.y;

int pred_q=q_patt;

For(std::vector::const_iterator iter=polygon.begin();iter!=end;++iter)
{
T cur_pt = *iter;

Cur_pt.x-=test.x;
cur_pt.y-=test.y;

정수 q=q_patt;

스위치(q-pred_q)
{
경우 -3:++w;중단;
사례 3:--w;중단;
경우 -2:if(pred_pt.x*cur_pt.y>=pred_pt.y*cur_pt.x) ++w;중단;
사례 2:if(!(pred_pt.x*cur_pt.y>=pred_pt.y*cur_pt.x)) --w;break;
}

Pred_pt = cur_pt;
예측_q = q;

2차원 공간에서 두 선은 좌표(x, y)로 주어진 한 점에서만 교차합니다. 두 선이 교차점을 통과하기 때문에 좌표(x, y)는 이 선을 설명하는 두 방정식을 모두 충족해야 합니다. 일부 고급 기술을 사용하면 포물선 및 기타 이차 곡선의 교차점을 찾을 수 있습니다.

단계

두 선의 교차점

    방정식의 왼쪽에서 변수 "y"를 분리하여 각 줄의 방정식을 작성하십시오.방정식의 다른 항은 오른쪽방정식. 아마도 "y" 대신에 주어진 방정식에는 변수 f(x) 또는 g(x)가 포함될 것입니다. 이 경우 그러한 변수를 분리하십시오. 변수를 분리하려면 적절한 수학 연산방정식의 양쪽에.

    • 선의 방정식이 당신에게 주어지지 않은 경우, 당신이 알고 있는 정보를 기반으로 합니다.
    • 예시. 방정식으로 설명되는 직선이 주어지면 y − 12 = − 2 x (\displaystyle y-12=-2x). 두 번째 방정식에서 "y"를 분리하려면 방정식의 양쪽에 숫자 12를 추가합니다.
  1. 두 선의 교차점, 즉 (x,y) 좌표가 두 방정식을 모두 만족하는 점을 찾고 있습니다. 변수 "y"는 각 방정식의 좌변에 있으므로 각 방정식의 우변에 있는 식은 등식화할 수 있습니다. 새로운 방정식을 작성하십시오.

    • 예시. 처럼 y = x + 3 (\displaystyle y=x+3)그리고 y = 12 − 2x (\displaystyle y=12-2x), 다음 등식을 작성할 수 있습니다. .
  2. 변수 "x"의 값을 찾으십시오.새 방정식에는 하나의 변수 "x"만 포함됩니다. "x"를 찾으려면 방정식의 양쪽에서 적절한 수학을 수행하여 방정식의 왼쪽에서 이 변수를 분리합니다. x = __와 같은 방정식으로 끝나야 합니다(이렇게 할 수 없는 경우 이 섹션 참조).

    • 예시. x + 3 = 12 − 2 x (\디스플레이 스타일 x+3=12-2x)
    • 추가하다 2x(\displaystyle 2x)방정식의 각 변에:
    • 3x + 3 = 12(\displaystyle 3x+3=12)
    • 방정식의 각 변에서 3을 뺍니다.
    • 3x=9(\displaystyle 3x=9)
    • 방정식의 각 변을 3으로 나눕니다.
    • x = 3(\디스플레이 스타일 x=3).
  3. 변수 "x"의 찾은 값을 사용하여 변수 "y"의 값을 계산합니다.이렇게 하려면 방정식(임의) 직선에서 찾은 값 "x"를 대입합니다.

    • 예시. x = 3(\디스플레이 스타일 x=3)그리고 y = x + 3 (\displaystyle y=x+3)
    • y = 3 + 3 (\displaystyle y=3+3)
    • y=6(\디스플레이 스타일 y=6)
  4. 답을 확인하세요.이렇게 하려면 직선의 다른 방정식에서 "x" 값을 대입하고 "y" 값을 찾으십시오. 당신이받는 경우 이의"y", 계산의 정확성을 확인하십시오.

    • 예시: x = 3(\디스플레이 스타일 x=3)그리고 y = 12 − 2x (\displaystyle y=12-2x)
    • y = 12 − 2 (3) (\displaystyle y=12-2(3))
    • y = 12 − 6 (\displaystyle y=12-6)
    • y=6(\디스플레이 스타일 y=6)
    • 동일한 "y" 값을 얻었으므로 계산에 오류가 없습니다.
  5. 좌표(x, y)를 기록합니다."x"와 "y" 값을 계산하여 두 선의 교차점 좌표를 찾았습니다. 교차점의 좌표를 (x, y) 형식으로 기록합니다.

    • 예시. x = 3(\디스플레이 스타일 x=3)그리고 y=6(\디스플레이 스타일 y=6)
    • 따라서 좌표가 (3,6)인 점에서 두 선이 교차합니다.
  6. 특별한 경우의 계산.어떤 경우에는 변수 "x"의 값을 찾을 수 없습니다. 하지만 그렇다고 해서 실수를 한 것은 아닙니다. 다음 조건 중 하나가 충족되면 특별한 경우가 발생합니다.

    • 두 선이 평행하면 교차하지 않습니다. 이 경우 변수 "x"는 단순히 줄어들고 방정식은 의미 없는 평등이 됩니다(예: 0 = 1(\디스플레이 스타일 0=1)). 이 경우 선이 교차하지 않거나 솔루션이 없음을 답에 적어 두십시오.
    • 두 방정식이 하나의 직선을 설명하면 무한한 수의 교차점이 있습니다. 이 경우 변수 "x"는 간단히 줄어들고 방정식은 완전 평등으로 바뀝니다(예: 3 = 3(\디스플레이 스타일 3=3)). 이 경우 두 행이 일치한다는 것을 답에 적어 주십시오.

    이차 함수의 문제

    1. 이차 함수의 정의.이차 함수에서 하나 이상의 변수는 두 번째 차수를 갖습니다(그러나 더 높지는 않음). 예를 들어, x 2 (\디스플레이 스타일 x^(2))또는 y 2 (\displaystyle y^(2)). 이차 함수의 그래프는 한 점 또는 두 점에서 교차하거나 교차할 수 없는 곡선입니다. 이 섹션에서는 이차 곡선의 교차점을 찾는 방법에 대해 설명합니다.

    2. 방정식의 왼쪽에 있는 변수 "y"를 분리하여 각 방정식을 다시 작성합니다.방정식의 다른 항은 방정식의 오른쪽에 배치해야 합니다.

      • 예시. 그래프의 교차점 찾기 x 2 + 2 x − y = − 1 (\displaystyle x^(2)+2x-y=-1)그리고
      • 방정식의 왼쪽에서 변수 "y"를 분리합니다.
      • 그리고 y = x + 7 (\displaystyle y=x+7) .
      • 이 예에서는 하나의 2차 함수와 하나의 선형 함수가 제공됩니다. 두 가지가 주어진다면 기억하십시오. 이차 함수, 계산은 아래 단계와 유사합니다.
    3. 각 방정식의 오른쪽에 있는 식을 동일시하십시오.변수 "y"는 각 방정식의 좌변에 있으므로 각 방정식의 우변에 있는 식은 등식화할 수 있습니다.

      • 예시. y = x 2 + 2 x + 1 (\displaystyle y=x^(2)+2x+1)그리고 y = x + 7 (\displaystyle y=x+7)
    4. 결과 방정식의 모든 항을 좌변으로 옮기고 우변에 0을 씁니다.이렇게 하려면 기본 수학 연산을 수행하십시오. 이렇게 하면 결과 방정식을 풀 수 있습니다.

      • 예시. x 2 + 2 x + 1 = x + 7 (\디스플레이 스타일 x^(2)+2x+1=x+7)
      • 방정식의 양변에서 "x"를 뺍니다.
      • x 2 + x + 1 = 7 (\디스플레이 스타일 x^(2)+x+1=7)
      • 방정식의 양변에서 7을 뺍니다.
    5. 결정하다 이차 방정식. 방정식의 모든 항을 좌변으로 옮기면 이차 방정식을 얻을 수 있습니다. 세 가지 방법으로 해결할 수 있습니다. 특수 공식 사용 및.

      • 예시. x 2 + x − 6 = 0 (\디스플레이 스타일 x^(2)+x-6=0)
      • 방정식을 인수분해하면 두 개의 이항식을 얻을 수 있으며 곱하면 원래 방정식이 됩니다. 이 예에서 첫 번째 멤버는 x 2 (\디스플레이 스타일 x^(2)) x*x로 분해할 수 있습니다. 다음 항목을 확인하십시오. (x)(x) = 0
      • 이 예에서 절편 -6은 다음과 같이 인수분해될 수 있습니다. − 6 * 1 (\displaystyle -6*1), − 3 * 2 (\displaystyle -3*2), − 2 * 3 (\displaystyle -2*3), − 1 * 6 (\displaystyle -1*6).
      • 이 예에서 두 번째 항은 x(또는 1x)입니다. 1이 될 때까지 각 절편 요소 쌍(이 예에서는 -6)을 추가합니다. 이 예에서 올바른 절편 요소 쌍은 -2와 3입니다( − 2 * 3 = − 6 (\displaystyle -2*3=-6)), 처럼 − 2 + 3 = 1 (\디스플레이 스타일 -2+3=1).
      • 발견된 숫자 쌍으로 공백을 채우십시오: .
    6. 두 그래프의 두 번째 교차점을 잊지 마십시오.문제를 매우 신중하게 해결하지 않고 신속하게 해결하면 두 번째 교차점을 잊어버릴 수 있습니다. 두 교차점의 "x" 좌표를 찾는 방법은 다음과 같습니다.

      • 예(인수분해). 만약 방정식에서 (x − 2) (x + 3) = 0 (\displaystyle (x-2)(x+3)=0)대괄호 안의 표현식 중 하나가 0이면 전체 방정식은 0이 됩니다. 따라서 다음과 같이 작성할 수 있습니다. x − 2 = 0(\디스플레이 스타일 x-2=0)x = 2(\디스플레이 스타일 x=2) 그리고 x + 3 = 0(\디스플레이 스타일 x+3=0)x = − 3 (\디스플레이 스타일 x=-3) (즉, 방정식의 두 근을 찾았습니다).
      • 예(공식 또는 완전제곱 사용). 이 방법 중 하나를 사용하면 솔루션이 표시됩니다. 제곱근. 예를 들어, 우리 예의 방정식은 다음 형식을 취합니다. x = (− 1 + 25) / 2 (\디스플레이 스타일 x=(-1+(\제곱(25)))/2). 제곱근을 취하면 두 가지 해를 얻을 수 있음을 기억하십시오. 우리의 경우: 25 = 5 * 5 (\displaystyle (\sqrt(25))=5*5), 그리고 25 = (− 5) * (− 5) (\displaystyle (\sqrt (25))=(-5)*(-5)). 따라서 두 개의 방정식을 작성하고 두 개의 x 값을 찾으십시오.
    7. 그래프는 한 점에서 교차하거나 전혀 교차하지 않습니다.이러한 상황은 다음 조건이 충족될 때 발생합니다.

      • 그래프가 한 점에서 교차하는 경우 이차 방정식은 동일한 요인으로 분해됩니다(예: (x-1) (x-1) = 0, 0의 제곱근은 공식( 0(\디스플레이 스타일(\sqrt(0)))). 이 경우 방정식의 해는 하나만 있습니다.
      • 그래프가 전혀 교차하지 않으면 방정식이 인수분해되지 않고 음수의 제곱근이 공식에 나타납니다(예: − 2 (\displaystyle (\sqrt(-2)))). 이 경우 답이 없음을 기재합니다.
이것은 계산 기하학에 대한 내 기사의 두 번째 부분입니다. 퍼즐이 조금 더 어려울 것이기 때문에이 기사가 이전 기사보다 더 재미있을 것이라고 생각합니다.

시작하자 상대 위치선, 광선 및 선분에 상대적인 점.

작업 #1
점과 선의 상대 위치 결정: 선 위, 선 위, 선 아래에 있습니다.

결정
직선이 ax + by + c = 0 방정식으로 주어지면 여기서 풀 수 있는 것이 없습니다. 점의 좌표를 직선의 방정식으로 대입하고 그것이 무엇인지 확인하는 것으로 충분합니다. 0보다 크면 점은 상부 반평면에 있고, 0과 같으면 점은 선 위에 있고, 0보다 작으면 점은 하부 반평면에 있습니다. 더 흥미로운 것은 두 점의 좌표로 주어진 선을 P 1 (x 1, y 1), P 2 (x 2, y 2)라고 부르는 경우입니다. 이 경우 계수 a, b, c를 안전하게 찾아 앞의 추론을 적용할 수 있습니다. 그러나 우리는 먼저 생각해야 합니다. 우리에게 그것이 필요합니까? 당연히 아니지! 내가 말했듯이, 스큐 곱은 계산 기하학의 보석일 뿐입니다. 적용해봅시다. 두 벡터의 스큐 곱은 첫 번째 벡터에서 두 번째 벡터로의 회전이 반시계 방향이면 양수이고, 벡터가 동일선상에 있으면 0이고 회전이 시계 방향이면 음수입니다. 따라서 벡터 P 1 P 2 와 P 1 M의 스큐 곱을 계산하고 그 부호를 기반으로 결론을 내리는 것으로 충분합니다.

작업 #2
점이 광선에 속하는지 확인합니다.

결정
광선이 무엇인지 기억합시다. 광선은 한 점으로 경계를 이루는 직선이고 다른 한 점에서는 무한합니다. 즉, 광선은 어떤 시작점과 그 위에 놓인 임의의 점에 의해 주어집니다. 점 P 1 (x 1 , y 1) 을 광선의 시작이라고 하고 P 2 (x 2 , y 2) 를 광선에 속하는 임의의 점이라고 합니다. 점이 광선에 속하면 이 점을 통과하는 선에도 속하지만 그 반대는 아닙니다. 따라서 선에 속한다는 것은 광선에 속하기 위한 필요조건일 뿐 충분조건은 아니다. 따라서 우리는 스큐 제품을 확인하지 않을 수 없습니다. 충분한 조건을 위해서는 동일한 벡터의 스칼라 곱도 계산해야 합니다. 0보다 작으면 점은 광선에 속하지 않고 음수가 아니면 점이 광선 위에 있습니다. 왜 그런 겁니까? 도면을 봅시다.

따라서 점 M(x, y)이 초기 점 P 1 (x 1 , y 1)을 갖는 광선 위에 놓이기 위해서는 P 2 (x 2 , y 2)가 광선 위에 놓이는 것이 필요합니다. 두 가지 조건을 충족하기에 충분합니다.

2. (P 1 P 2 , P 1 M) ≥ 0은 스칼라 곱입니다(점은 광선에 있음)

작업 #3
점이 세그먼트에 속하는지 확인합니다.

결정
점 P 1 (x 1, y 1), P 2 (x 2, y 2)가 주어진 선분의 끝이라고 하자. 다시 필요조건한 점이 세그먼트에 속하는 것은 P 1 , P 2 를 통과하는 직선에 속하는 것입니다. 다음으로, 포인트가 포인트 P 1 과 P 2 사이에 있는지 여부를 결정해야 합니다. 이를 위해 이번에는 다른 벡터의 스칼라 곱의 도움을 받습니다: (MP 1 , MP 2). 0보다 작거나 같으면 점이 세그먼트 위에 있고 그렇지 않으면 세그먼트 외부에 있습니다. 왜 그런 겁니까? 그림을 봅시다.

따라서 점 M(x, y)이 끝이 P 1 (x 1 , y 1), P 2 (x 2 , y 2)인 선분에 놓이려면 다음 조건을 충족하는 것이 필요하고 충분합니다.
1. \u003d 0 - 제품 비뚤어짐(점이 선 위에 있음)
2. (MP 1 ,MP 2) ≤ 0 – 내적(점은 P 1과 P 2 사이에 있음)

작업 #4
직선에 대한 두 점의 상대적 위치.

결정
이 문제에서는 직선의 한쪽 또는 반대쪽에 있는 두 점을 결정해야 합니다.

점이 직선의 반대쪽에 있으면 스큐 제품은 다음을 갖습니다. 다른 징후, 그래서 그들의 제품은 음수입니다. 점이 직선에 대해 같은 쪽에 있으면 비뚤어진 곱의 부호가 일치하여 곱이 양수임을 의미합니다.
그래서:
1. * < 0 – точки лежат по разные стороны.
2. * > 0 – 점이 같은 쪽에 있습니다.
3. * = 0 - 점 중 하나(또는 두 개)가 직선 위에 있습니다.

그건 그렇고, 선과 선분의 교차점의 존재를 결정하는 문제는 정확히 같은 방식으로 해결됩니다. 보다 정확하게는 이것은 동일한 문제입니다. 선분의 끝이 직선에 대해 다른 측면에 있거나 선분의 끝이 직선 위에 있을 때 선분과 직선이 교차하는 경우, 즉 필요합니다. * ≤ 0이 필요합니다.

작업 #5
두 선이 교차하는지 확인합니다.

결정
선이 일치하지 않는다고 가정합니다. 선이 평행할 때만 교차하지 않는다는 것은 분명합니다. 따라서 평행도의 조건을 찾으면 선이 교차하는지 여부를 결정할 수 있습니다.
선이 방정식 a 1 x + b 1 y + c 1 = 0 및 a 2 x + b 2 y + c 2 = 0에 의해 주어진다고 가정합니다. 그러면 평행선의 조건은 a 1 b 2 - a 2 b 1 = 0
선이 점 P 1 (x 1, y 1), P 2 (x 2, y 2), M 1 (x 3, y 3), M 2 (x 4, y 4)로 주어지면 조건 병렬 처리는 벡터 P 1 P 2 및 M 1 M 2의 스큐 곱을 확인하는 데 있습니다. 이 값이 0이면 선이 평행합니다.

일반적으로 선이 방정식으로 주어질 때 방향 벡터라고 하는 벡터 (-b 1 , a 1), (-b 2 , a 2)의 스큐 곱도 확인합니다.

작업 #6
두 개의 선분이 교차하는지 확인합니다.

결정
제가 정말 좋아하는 작업입니다. 각 세그먼트의 끝이 다른 세그먼트의 반대쪽에 있을 때 세그먼트가 교차합니다. 그림을 봅시다.

따라서 각 세그먼트의 끝이 다른 세그먼트의 상대적 끝의 반대쪽에 있는지 확인해야 합니다. 벡터의 스큐 곱을 사용합니다. 첫 번째 그림을 보십시오: > 0,< 0 => * < 0. Аналогично
* < 0. Вы наверно думаете, почему не меньше либо равно. А потому, что возможен следующий случай, при котором векторное произведение как раз и равно нулю, но отрезки не пересекаются:

따라서 우리는 한 번 더 확인해야 합니다. 즉, 각 세그먼트의 적어도 한 쪽 끝이 다른 쪽(세그먼트의 한 지점에 속함)에 속하는지 여부입니다. 우리는 이미 이 문제를 해결했습니다.

따라서 세그먼트에 공통점이 있으려면 다음이 필요하고 충분합니다.
1. 세그먼트의 끝은 다른 세그먼트에 비해 다른 면에 있습니다.
2. 한 세그먼트의 끝 중 하나 이상이 다른 세그먼트에 속합니다.

작업 #7
점에서 선까지의 거리입니다.

결정
두 점 P 1 (x 1, y 1)과 P 2 (x 2, y 2)에 의해 선이 주어집니다.

이전 기사에서 우리는 기하학적으로 치우친 곱이 평행사변형의 배향된 영역이므로 S P 1 P 2 M = 0.5*라는 사실에 대해 이야기했습니다. 반면에, 모든 학생은 삼각형의 넓이를 구하는 공식을 알고 있습니다: 밑변의 절반 곱하기 높이.
SP 1 P 2 M \u003d 0.5 * h * P 1 P 2.
이러한 영역을 동일시하면 다음을 찾을 수 있습니다.

첫 번째 영역이 지향되기 때문에 모듈로를 사용했습니다.

선이 방정식 ax + by + c = 0으로 주어지면 주어진 선에 수직인 점 M을 통과하는 선의 방정식은 다음과 같습니다. a (y - y 0) - b (x - x 0) = 0. 이제 얻은 방정식에서 시스템을 쉽게 풀고 교차점을 찾고 시작점에서 발견 된 점까지의 거리를 계산할 수 있습니다. 정확히 ρ = (ax 0 + by 0 + c) / √ (a 2 + b 2).

작업 #8
점에서 보까지의 거리입니다.

결정
이 문제는 이 경우 발생할 수 있다는 점에서 이전 문제와 다르므로 점으로부터의 수직선이 광선에 떨어지지 않고 연속성에 해당합니다.

수직선이 광선에 떨어지지 않는 경우 점에서 광선의 시작 부분까지의 거리를 찾아야합니다. 이것이 문제의 답이 될 것입니다.

수직선이 광선에 떨어지는지 여부를 결정하는 방법은 무엇입니까? 수직선이 광선에 떨어지지 않으면 각 MP 1 P 2는 둔각이고 그렇지 않으면 예각입니다(직선). 따라서 벡터의 스칼라 곱의 부호에 의해 수직선이 광선에 떨어지는지 여부를 결정할 수 있습니다.
1. (P1M,P1P2)< 0 перпендикуляр не попадает на луч
2. (P 1 M, P 1 P 2) ≥ 0 수직선이 광선에 닿음

작업 #9
점에서 선까지의 거리입니다.

결정
우리는 이전 문제와 유사하게 주장합니다. 수직선이 선분에 떨어지지 않으면 답은 주어진 점에서 선분 끝까지의 거리의 최소값입니다.

수직이 세그먼트에 떨어지는지 여부를 결정하려면 이전 작업과 유사하게 벡터의 스칼라 곱을 사용해야 합니다. 수직선이 선분에 떨어지지 않으면 각 MP 1 P 2 또는 각 MP 2 P 1이 둔각입니다. 따라서 기호에 따라 스칼라 곱수직선이 세그먼트에 떨어지는지 여부를 결정할 수 있습니다.
만약 (P 1 M, P 1 P 2)< 0 или (P 2 M, P 2 P 1) < 0 то перпендикуляр не падает на отрезок.

작업 #10
선과 원의 점 수를 결정하십시오.

결정
선과 원은 0개, 1개 또는 2개의 교차점을 가질 수 있습니다. 사진을 봅시다:

여기 도면에서 모든 것이 명확합니다. 원의 중심에서 선까지의 거리가 원의 반지름보다 작으면 두 개의 교차점이 있습니다. 중심에서 선까지의 거리가 반지름과 같으면 한 점. 그리고 마지막으로 원의 중심에서 직선까지의 거리가 원의 반지름보다 크면 교차점이 없습니다. 점에서 선까지의 거리를 구하는 문제는 이미 우리가 해결했기 때문에 이 문제도 해결되었습니다.

작업 #11
두 개의 원의 상호 배열.

결정
원 배열의 가능한 경우: 교차, 터치, 교차하지 않음.

원이 교차하는 경우를 고려하고 교차 영역을 찾으십시오. 나는 이 문제를 아주 좋아한다. 왜냐하면 나는 그것을 푸는 데 상당한 시간을 할애했기 때문이다.




이제 섹터와 세그먼트가 무엇인지 생각해 봅시다.

원의 교차점은 두 개의 세그먼트 O 1 AB와 O 2 AB로 구성됩니다.

이 세그먼트의 영역을 추가하는 것이 필요할 것 같습니다. 그게 전부입니다. 그러나 모든 것이 그렇게 간단하지 않습니다. 이러한 공식이 항상 참인지 여부도 확인해야 합니다. 그렇지 않다는 것이 밝혀졌습니다!

두 번째 원 O 2 의 중심이 점 C와 일치하는 경우를 고려하십시오. 이 경우 d 2 = 0이고 α 값으로 α = π를 취합니다. 이 경우 면적이 1/2 πR 2 2 인 반원이 있습니다.

이제 두 번째 원 O 2 의 중심이 점 O 1 과 C 사이에 있는 경우를 고려하십시오. 이 경우 d 2 의 음수 값을 얻습니다. d 2 의 음수 값을 사용하면 음수 값ㅏ. 이 경우 정답을 위해서는 α에 2π를 더해야 합니다.

결론
그게 다야 우리는 객체의 상대적 위치에 관한 계산 기하학의 가장 일반적인 문제를 모두 고려하지는 않았지만 가장 일반적인 문제를 고려했습니다.

마음에 드셨길 바랍니다.

문제를 해결하기 위해 다음 단계로 나눕니다.

  1. 다차원 공간의 측면에서 문제의 고려.
  2. 2차원 공간의 측면에서 문제를 고려합니다.
  3. 교차점 수 계산.

다차원 공간의 측면에서 문제의 고려

선이 3차원 공간에 있다고 가정하면 한 평면에서는 서로 평행하지 않고 다른 평면에서는 서로 떨어져 있을 수 있습니다. 이는 이러한 선이 쌍으로 평행하지 않고 교차점이 없음을 의미합니다.

2차원 공간의 측면에서 문제의 고려

2차원 공간(평면)에서 두 선은 평행하지 않습니다. 즉, 반드시 하나의 교차점이 있어야 합니다. 조건에 따라 선은 하나의 (공통) 교차점을 통과하지 않으므로 선이 쌍으로 평행하지 않기 때문에 각각은 나머지 선과 반드시 ​​교차합니다.

교차점 수 계산

평행하지 않은 새로운 선을 평면에 추가할 때 평면에 이미 그려진 선과의 교차점이 추가됩니다. 따라서 두 개의 선은 1개의 교차점을 제공합니다. 세 번째 선을 추가하면 이미 그려진 두 선과 교차점을 2개 더 얻습니다. 네 번째 직선을 추가하면 3개의 교차점이 더 생깁니다. 다섯 번째 - 교차점이 4개 더 있습니다. 따라서 전체적으로 다음을 얻습니다.

1 + 2 + 3 + 4 = 10개의 교차점

답: 1) 다차원 공간 - 교차점 0개; 2) 2차원 공간 - 10개의 교차점.

두 개의 선에는 하나의 교차점이 있습니다. 선을 하나 더 추가하면 이 두 선 각각과 교차점을 2개 더 얻습니다. 선을 하나 더 추가하면 이미 선이 있었던 만큼의 교차점이 추가로 제공됩니다. 3개 더 등등. 각 n번째 라인은 (n-1)개의 라인과의 추가 (n-1)개의 교차점을 제공합니다.

1 + 2 + 3 + 4 = 10

3개의 선 중 1개의 공통 교차점이 없는 경우 위의 모든 내용이 참입니다.

그럼에도 불구하고 선이 한 점에서 교차할 수 있지만 한 번에 모두 교차할 수 없는 경우 별이 있는 4개의 선을 배치하면 교차점이 1개 있고 5번째 선을 추가하면 4개의 점이 더 생깁니다. 이 경우 5개의 선에는 5개의 공통 교차점이 있습니다.

답: 한 점에서 2개 이상의 선이 교차하지 않을 때 5개의 평행하지 않은 선으로 10개의 교차점이 형성됩니다. 또는 한 점에서 두 개 이상의 선이 교차할 수 있는 경우 교차점 5개.

로드 중...로드 중...