교차하는 피쳐의 Z에서 피쳐 정점 Z를 설정하는 방법은 무엇입니까?

교차하는 피쳐의 Z에서 피쳐 정점 Z를 설정하는 방법은 무엇입니까?


ArcGIS에서 다른 선과 교차하는 선 부분의 Z 값을 다른 선의 Z 값으로 설정하려면 어떻게 해야 합니까? 일괄 처리가 바람직합니다.

FeatureToLine을 시도했지만 라인 A(파란색)의 null 값은 null로 유지됩니다.

[최신 정보] 빨간색 선은 소스이고 상수 Z를 갖지만 궁극적으로 일정해야 할 이유는 없습니다. 파란색 선은 변경하려는 정점이 있는 대상인 변수 Z이고 빨간색 선은 읽기 전용이고 작업에 의해 변경되지 않아야 합니다.

(다이아몬드는 꼭지점이 어디에 있는지를 나타내기 위한 것입니다.)


통합 도구를 사용하여 두 선의 교차점에 정점을 삽입할 수 있습니다. 등고선 데이터 세트의 순위가 낮고 파란색 선 데이터 세트가 Z를 인식하는지 확인하십시오. 통합 도구는 Z 값을 존중하지 않으므로(일부 샘플 데이터에서 확인했습니다) 삽입된 꼭짓점의 Z 속성을 업데이트해야 합니다. 이제 이 시점에서 높이 값을 취할 수 있는 기존 지오 프로세싱 도구를 알지 못합니다. 필드에서 정점의 Z 속성을 업데이트하는 데 사용합니다…

이 다음 단계를 수행하려면 일부 ArcObject를 사용해야 한다고 생각합니다. 여기에서 일부 코드에 대해 설명합니다.


ArcGIS의 속성 테이블에서 Z 정점 전송 속성 값에서 전송된 양방향 Z 정점 값을 보여 주는 이 비디오


Z 값이 있는 피쳐 편집

z 값은 일반적으로 고도 또는 높이를 나타내며 3차원으로 피처를 표시하는 데 사용할 수 있습니다. 특징의 각 정점은 x, y 위치 정보와 함께 z 값을 저장할 수 있습니다. ArcMap과 편집 환경은 2차원이지만 z 값을 입력, 편집 및 유지 관리하는 기능을 제공합니다.

ArcMap에서 편집할 때 z-값 할당은 편집 도구 또는 명령이 수행하는 일반 기능(새 기능을 생성하거나 기존 기능을 편집하는지 여부)에 따라 결정됩니다. 새 기능이 생성되는 대부분의 작업은 모든 정점에 동일한 기본 z-값을 할당합니다. 기존 피쳐가 수정되면 새 z 값이 보간되고 업데이트된 값이 편집된 정점에 할당됩니다. 그러나 일부 편집 작업은 단순히 기존 z-값을 유지합니다.

스케치 속성 편집 창에서 피처의 z 값을 보거나 변경할 수 있습니다. Z 값은 Z 열에 나열됩니다. 여러 정점의 z 값을 변경하려면 업데이트하려는 정점 왼쪽의 상자를 선택한 다음 Z 버튼을 클릭하고 새 값을 입력합니다.

피쳐에 z값을 저장하려면 피쳐 클래스를 생성할 때 피쳐 클래스에 z값이 있음을 지정해야 합니다. 이렇게 하면 피쳐 클래스가 z를 인식합니다. 피쳐 클래스가 z를 인식하는지 확인하려면 ArcCatalog 또는 카탈로그 창에서 해당 속성을 열고 일반 탭을 클릭한 다음 지오메트리 속성 아래에서 좌표에 Z 값 포함 옆에 있는 체크 표시를 확인합니다. Polyline Z에서와 같이 ArcMap의 속성 테이블에 있는 Shape 필드에도 Z가 있습니다.

좌표에 Z 값 포함 옆에 있는 확인 표시는 피쳐 클래스가 z를 인식하고 z 값을 저장할 수 있음을 나타냅니다.

기존 피쳐 클래스가 z를 인식하지 못하는 경우 z값을 저장할 수 있는 새 피쳐 클래스를 생성한 다음 기존 피쳐 클래스의 피쳐를 로드하거나 복사하여 새 피쳐 클래스에 붙여넣고 z값을 편집해야 합니다. ArcMap에서 Z 인식 피처 클래스를 생성하거나 Z 값을 편집하는 데 ArcGIS 3D Analyst 확장 라이선스가 필요하지 않습니다. 그러나 3D Analyst가 있는 경우 ArcGlobe 또는 ArcScene에서 피처를 편집할 수도 있습니다.

다음 섹션에서는 ArcMap에서 피처를 편집할 때의 동작에 대해 설명합니다.


통사론

ASCII 파일로 내보낼 3D 점, 다중점, 폴리선 또는 폴리곤 피쳐 클래스입니다.

출력 파일이 기록될 폴더입니다.

결과 ASCII 파일의 이름입니다.

선 또는 폴리곤 피쳐 클래스를 XYZ 형식으로 내보내는 경우 파일 이름이 기준 이름으로 사용됩니다. XYZ 형식은 파일당 하나의 라인 또는 폴리곤만 지원하므로 각 기능에는 고유한 파일 출력이 있습니다. 멀티파트 기능에는 각 파트가 별도의 파일에 기록됩니다. 파일 이름에는 각 기능의 OID와 함께 각 파일 이름을 고유하게 만드는 데 필요한 추가 문자가 추가됩니다.

생성 중인 ASCII 파일의 형식입니다.

  • GENERATE — GENERATE 형식으로 출력을 씁니다. 이것이 기본값입니다.
  • XYZ - 입력 피처의 XYZ 정보를 씁니다. 입력 피처의 각 라인 또는 폴리곤에 대해 하나의 파일이 생성됩니다.
  • PROFILE —외부 그래프 응용 프로그램에서 사용할 수 있는 선 피쳐에 대한 프로필 정보를 씁니다.

텍스트 파일 테이블의 열에서 항목 구분을 나타내는 데 사용되는 구분 기호입니다.

  • SPACE - 필드 값을 구분하는 데 공백이 사용됩니다. 이것이 기본값입니다.
  • 쉼표 — 쉼표는 필드 값을 구분하는 데 사용됩니다. 소수 구분 기호도 쉼표인 경우 이 옵션을 적용할 수 없습니다.

출력 파일에 저장된 유효 자릿수를 결정하는 데 사용되는 방법입니다.

  • 자동 - 불필요한 후행 0을 제거하면서 사용 가능한 정밀도를 유지하는 데 필요한 유효 자릿수가 자동으로 결정됩니다. 이것이 기본값입니다.
  • FIXED — 유효 자릿수가 소수점 이하 자릿수 매개변수에 정의됩니다.

Decimal Notation이 FIXED로 설정되어 있을 때 사용됩니다. 이것은 출력 파일에 기록된 부동 소수점 값에 대해 소수 다음에 기록되는 자릿수를 결정합니다.

숫자의 정수를 분수 부분과 구별하는 데 사용되는 10진수 문자입니다.

  • DECIMAL_POINT - 소수점이 소수점 문자로 사용됩니다. 이것이 기본값입니다.
  • DECIMAL_COMMA - 쉼표는 십진수 문자로 사용됩니다.

2 답변 2

예, OpenGL에서는 가능합니다. GPU에서 객체의 경계 상자를 계산하는 유사한 기술을 수행하고 있습니다. 단계는 다음과 같습니다.

  1. 자체 FBO에 크기 1x1 유형 RGBA_32F의 렌더 버퍼를 정렬합니다. 렌더 대상으로 설정합니다(깊이/스텐실 없음, 단일 색상 평면만). 더 큰 텍스처의 픽셀일 수 있으며, 이 경우 뷰포트를 올바르게 설정해야 합니다.
  2. 기본 값으로 지우십시오. 'min'의 경우 큰 숫자가 될 것이고 'max'의 경우 음의 거대한 숫자가 될 것입니다.
  3. 계수 (1,1)에 해당하는 혼합 함수 '최소' 또는 '최대'를 설정합니다.
  4. (0,0,0,1) 좌표로 점을 생성하는 셰이더로 메쉬를 그립니다. 원래 정점 세계 위치를 포함하는 색상을 출력합니다.

여기에서 추가로 최적화할 수 있습니다. 예를 들어 기하 도형 셰이더를 활용하고 출력 픽셀 중 하나의 위치를 ​​무효화하여 한 번의 그리기 호출에서 '최소'와 '최대'를 모두 얻을 수 있습니다.


듀얼 컨투어링 - 특징점 찾기, 노멀 오프

내 데이터 소스는 16x16x16 그리드입니다. 이 그리드를 아래에서 위로, 왼쪽에서 오른쪽으로, 가까운 곳에서 먼 곳으로 횡단합니다.

내 그리드의 각 인덱스에 대해 큐브 구조를 만듭니다.

그리드를 가로지르는 방법 때문에 4개의 꼭짓점과 3개의 가장자리만 보면 됩니다. 이 그림에서 정점 2, 5, 6, 7은 내 정점 0, 1, 2, 3에 해당하고 가장자리 5, 6, 10은 내 가장자리 0, 1, 2에 해당합니다.

그런 다음 모든 가장자리에 부호 변경이 있는지 확인합니다. 하나가 있으면 주변 큐브를 찾아 해당 큐브의 특징점을 얻습니다.

이제 특징점을 큐브 중심으로 설정하면 작동합니다. 그러면 마인크래프트 모양이 뭉툭해집니다. 하지만 그건 내가 원하는 것이 아닙니다.

특징점을 찾으려면 이 게시물에서와 같이 하고 싶었습니다. https://gamedev.stackexchange.com/a/83757/49583

기본적으로 셀의 중심에서 정점을 시작합니다. 그런 다음 정점에서 각 평면으로 가져온 모든 벡터의 평균을 구하고 그 결과를 따라 정점을 이동하고 이 단계를 고정된 횟수만큼 반복합니다. 옮기다 찾았어요

결과를 따라 70%는 최소한의 반복으로 안정화됩니다.

그리고 특징점을 가져오는 함수로 각 모서리에 하나씩 3개의 평면을 만들고 중심까지의 거리를 평균화합니다.

그러나 작동하지 않고 정점이 도처에 있습니다. 오류는 어디에 있습니까? 가장자리 정점의 법선을 평균화하여 실제로 가장자리 법선을 계산할 수 있습니까? 데이터 소스로 정수 그리드만 있기 때문에 가장자리 중간점에서 밀도를 얻을 수 없습니다.

편집 : 나는 또한 여기 http://www.mathsisfun.com/algebra/systems-linear-equations-matrices.html 에서 행렬을 사용하여 3 평면의 교차점을 계산할 수 있다는 것을 발견했습니다. 적어도 그것이 내가 이해한 방식입니다. 이 방법을 만들었습니다

(2.0, 2.0, 2.0)에서 교차점을 계산하므로 올바르게 작동한다고 가정합니다. 여전히 올바른 정점이 아닙니다. 나는 그것이 정말로 나의 정상이라고 생각한다.


고도 필드 수직 연결 수정

네트워크의 고도 필드를 수정하려면 아래 단계를 완료하십시오.

수직 연결 페이지가 나타납니다. 수직 연결 정책이 Policy: Elevation Fields 인 경우 각 에지 소스에 대해 두 개의 행이 포함된 그리드가 표시됩니다. 이 그리드를 사용하여 각 모서리 소스의 각 방향에 대한 고도 필드를 설정할 수 있습니다.

표고 수준이 정수로 지정되기 때문에 드롭다운 목록에서 사용할 수 있는 유일한 필드는 정수 데이터 유형의 필드입니다. 모든 정수 값이 유효합니다. 즉, 선택한 필드는 양수, 음수 및 0 값을 가질 수 있습니다.

사용 중인 네트워크 데이터 세트가 생성 당시 고도 필드 수직 연결 정책을 사용하도록 구성되지 않은 경우 이 페이지에서 고도 필드를 편집할 수 없습니다. 네트워크를 생성한 후에는 수직 연결 정책을 변경할 수 없습니다.

고도 필드 변경 사항은 네트워크 데이터 세트에 저장됩니다.

네트워크 속성을 변경할 때 연결을 다시 설정하고, 영향을 받는 속성을 다시 계산하고, 네트워크 요소를 업데이트하기 위해 네트워크 데이터 세트를 구축해야 합니다.


@unutbu의 답변과 numpy-and-line-intersections에서 직접 뽑아낸 교차 알고리즘에서 작업하여 나는 이것을 생각해 냈습니다. 루프 내 루프 내의 교차점과 루프를 찾는 무차별 대입 방식 때문에 느립니다. 루프를 더 빠르게 만드는 방법이 있을 수 있지만 교차 알고리즘에 대해 잘 모르겠습니다.

편집하다: 위의 find_intersections는 수직 및 수평선이나 겹치는 선분을 처리하지 않습니다. 아래의 linelineintersect 함수는 이러한 경우를 처리하지만 전체 프로세스는 여전히 느립니다. 얼마나 남았는지 알 수 있도록 카운트를 추가했습니다. 또한 contour1 = plt.contour(Z1,colors='k')를 contour1 = plt.contour(X,Y,Z1,colors='k')로 변경하여 축과 교차점이 실제 X 및 Y에 있도록 했습니다. 그리드 포인트의 수가 아닌 그리드의 좌표입니다.

문제는 데이터가 너무 많다는 것입니다. 한 윤곽 세트에는 총 12818개의 선분을 포함하는 24개의 선이 있고, 다른 윤곽 세트에는 11411개의 선분이 있는 29개의 선이 있습니다. 확인해야 할 선 세그먼트 조합이 많이 있습니다(linelineintersect에 대한 696개 호출). 더 거친 그리드를 사용하여 함수를 계산하면 더 빠르게 결과를 얻을 수 있습니다(100 x 100은 원래의 500 x 500보다 훨씬 빠름). 일종의 라인 스윕 알고리즘을 수행할 수는 있지만 그러한 작업을 구현하는 방법을 모르겠습니다. 선 교차점 문제는 컴퓨터 게임에서 많은 응용 프로그램이 있으며 충돌 감지로 알려져 있습니다. 모든 교차점을 신속하게 결정할 수 있는 일부 그래픽 라이브러리가 있어야 합니다.

이 플롯은 실제 X 및 Y 축이 있는 50x50 그리드에 대한 것입니다.


3 답변 3

실제 솔루션을 찾기 위해 fsolve()의 초기 추측 값으로 점을 사용하는 것보다 shapely를 사용하여 교차점을 찾을 수 있습니다.

등고선을 폴리라인으로 보고 정점 좌표를 암시적 선 방정식(F(P) = a.X + b.Y + c = 0)에 연결합니다. 부호의 모든 변화는 2x2 선형 방정식을 풀어서 계산된 교차점입니다. 정교한 솔버가 필요하지 않습니다.

등고선을 동시에 감지해야 하는 경우 훨씬 더 복잡하지 않습니다. 선을 통과하는 수직 평면에 의한 지형 단면을 고려하십시오. 교차하는 그리드 타일의 가장자리를 따라 선형 보간법으로 고도를 얻을 수 있습니다. 그리드와의 교차점을 찾는 것은 Bresenham 선 그리기 알고리즘과 밀접한 관련이 있습니다.


정확한 z 좌표에서 삼각뿔 자르기

저는 삼각형 피라미드를 그림의 파란색 선으로 표시된 것처럼 아래쪽 베이스 부분과 위쪽 팁의 두 부분으로 정확하게 자르려고 합니다.

정점 A B C는 정확히 동일한 z 좌표를 가져야 합니다. 따라서 팁이 잘려지면 완벽하게 평평한(각이 없는) 표면이 남게 됩니다.

정점을 세분화하고 슬라이딩(Shift V)하고 다른 메쉬(필요한 z 좌표 사용)의 정점에 스냅하려고 시도했지만 해당 semms에는 슬라이드 작업에 대한 정점 스냅이 없습니다.

나는 또한 가장자리 루프와 슬라이드를 사용할 수 있도록 상단 정점을 0.0001로 베벨링하려고 시도했지만 동일한 문제가 발생합니다. 즉, 정점 스냅이 발생하지 않습니다.

각 모서리에 꼭짓점을 추가한 다음 정확한 z 좌표가 표시될 때까지 수동으로 제자리에 밀어넣을 수 있지만 이 작업을 여러 번 수행해야 하며 상대적으로 느리고 오류가 발생하기 쉽습니다.

객체를 정확히 두 조각으로 자르도록 하는 기본 제공 방식(또는 추가 기능)이 있습니까?


신뢰할 수 있는 삼각형 메쉬 교차 알고리즘 및 지질 모델링에서의 응용

다양한 표면 메쉬에 대한 신뢰할 수 있는 교차 알고리즘을 소개합니다. 제안된 알고리즘은 교차하는 삼각형 표면 세트에서 일치하는 표면 메쉬를 만듭니다. 이 알고리즘은 모든 퇴화 삼각형-삼각형 교차 사례를 효과적으로 처리합니다. 알고리즘의 핵심 아이디어는 교차 곡선 추적 방법과 결합된 광범위한 삼각형-가장자리 교차 사례 세트를 기반으로 합니다. 교차 작업은 전역 공간 검색 작업에 의존하지 않으며 재메싱 단계가 필요하지 않습니다. 교차 곡선은 고유한 곡선 각인 알고리즘을 사용하여 각 표면 메쉬에 도입됩니다. 각인 알고리즘은 가장자리 또는 한 지점에서 많은 표면의 퇴화 교차 사례를 자연스럽게 처리합니다. 알고리즘은 후속 메시 최적화 작업을 위해 일관된 메시 데이터 구조를 생성합니다. 메쉬 교차 알고리즘은 오일 저장소의 신뢰할 수 있는 수학적 모델링에 필수적인 지질 형성의 모델링 및 메쉬를 위한 일반적인 프레임워크 내에서 사용됩니다.

기관을 통해 액세스할 수 있는 구독 콘텐츠의 미리보기입니다.


비디오 보기: #როგორ მოვიმატოთ სიმაღლეში,სიმაღლეში ზრდის დაჩქარება