문제

나는 일에 시각화 프로젝트에 대한 2 차원의 지속적인 데이터입니다.그것은 일의 종류를 사용할 수 있습을 연구하 고도 데이터 또는 온도에 패턴을 2D 지도입니다.그 중심에,그것은 정말의 방법으로 평평하게 하고 3 차원으로 두 차원 플러스 컬러.내 특정 분야의 연구,내가 실제로 작동하지 않습으로 상승 지리적 데이터,하지만 그것은 좋은 유다,그래서 나는 그것을 통해 이 게시물입니다.

어쨌든 이 시점에서,나는"지속적인 색"렌더러 내가 함께 매우 기쁘게 생각:

Continuous Color Renderer

그라데이션의 표준 색상륜,어디에 빨간색 픽셀을 나타내 좌표를 가진 높은 가치,보라색 픽셀을 나타내는 값입니다.

기초 데이터 구조를 사용하여 몇 가지 아주 영리한(는 내가 너무 자신이)보간 알고리즘을 사용하려면 깊은 임의로 확대 세부사항으로 합니다.

이 시점에서,내가 원하는 그 어떤 지형 윤곽 라인을 사용하여(이차 베지 곡선),이지를 찾을 수 있다면 어떤 좋은 문학을 설명하는 효율적인 알고리즘을 찾는 그 곡선이 있습니다.

아이디어를 줄 것에 대해 나는에 대해 생각하고,여기에 가난한 사람의 구현(는 렌더러를 사용하 블랙 RGB 값이 발생할 때마다는 픽셀을 교차하는 윤곽 라인):

Continuous Color with Ghetto Topo Lines

몇 가지 문제가 있으로 이 방법,그래도:

  • 그래프 영역으로 가파른 경사 결과에 얇게(그리고 종종)topo 라인입니다.이상적으로,모든 topo 선이 계속되어야 한다.

  • 그래프 영역을 가진 평평한 경사 결과에 더 넓은 topo 라인(종종 전체 지역의 밤에서,특히,외부 주변의 렌더링이 지역).

그래서 나는 보고서 벡터 드로잉 방법을 얻기를 위해 사람들,좋은 완벽한 1 픽셀 두꺼운 곡선이 있습니다.의 기본 구조를 알고리즘을 다음 단계가 포함됩니다.

  1. 에서 각 상승하고 싶어 그리 topo 라인을 찾아 설정의 좌표가 상승에는 조정이 매우 가까운(주 엡실론 임의의 값)을 원하는 상승.

  2. 을 제거리입니다.예를 들면,세 가지 점에서 완벽하게 스트레이트 라인,그 중심점이 중복 이후,그것을 제거할 수 있습을 변경하지 않고 형태의 곡선.마찬가지로,베지어 곡선과 함께,그것은 종종을 제거하는 것이 가능하다 cetain 앵커 포인트의 위치를 조정하여 인접한 제어 포인트입니다.

  3. 조립한 나머지 포인트로,시퀀스를하는 등 각 세그먼트를 사이에 두 개의 포인트에 근접 고도 중립적인 궤도,및 개인 세그먼트까지 크로스 경로.각 지점 순서해야를 만들거나 다각형을 닫거나,교차하는 경계 상자의 렌더링이 지역입니다.

  4. 에 대한 각각의 정점을 찾을 한 쌍의 제어 포인트 결과 곡선 전시를 최소한 오류와 관련하여 중복 점 제거에서는 2 단계.

  5. 모든 기능의 지형에서 볼 수 있는 현재 연출 규모에 의해 표현되는 적절한 topo 라인입니다.예를 들면,데이터 포함한 스파이크와 고도이지만,매우 작은 직경,topo 라인해야 합니다.수직 기능만 무시하는 경우 자신의 기능경보다 작은 전반적으로 렌더링 단위의 이미지입니다.

그러나 에서도 이러한 제약 조건,나는 아직도 생각하는 여러 가지 다른 추론을 찾기 위한 라인:

  • 찾 높은 지점에서 렌더링을 경계 상자입니다.에서는 높은 지점,여행,내리막길을 따라 여러 가지 서로 다른 궤도.언제든지 통과선 crossest 고도 임계 값을 추가하는 점을 높이 특정 물통입니다.할 때 통과 경로에 도달한 로컬 최소한도 변경은 물론이고 여행됩니다.

  • 을 수행하 고해상도 통과 함께 직사각형의 경계 상자의 렌더링이 지역입니다.에서 각각 상승 임계값(및 활용 포인트,어디서나 경사면 반대 방향으로)을 추가,점을 높이 특정 물통입니다.후에 마무리하는 경계를 통과 추적 시작을 안쪽에서 경계에서 포인트 사람들도 있습니다.

  • 검색 전체 렌더링 지역을 복용,상승 측정에 희소 정기적인 간격입니다.각 측정을 사용하고,그것의 호텔 상승으므로 임계값을 초과하는 메커니즘을 결정을 할 것인지 여부는 보정된 측정을 이용하실 수 있습니다.이 기술을 사용하는 것을 제공합 보장 범위 전체에 걸쳐링이 지역이지만,그것은 어려울 수립하는 결과 점으로 합리적인 순서에 대한 구축 경로입니다.

그래서,그는 내 생각...

다이빙을 하기 전에 깊이 구현,하고 싶었는지 누군가에서 유래 경험을 가지고 있으로 이런 종류의 문제를 제공할 수 있다 포인터를 위한 정확하고 효율적인 구현합니다.

편집:

나에 특히 관심이 있는"그라데이션"제안 ellisbben.와 나의 핵심 데이터 구조(을 무시하고 몇 가지의 최적화를 보간 단축)으로 표시할 수 있습의 합산 집합의 2D 가우스 기능이 완전히 미분 있습니다.

나는 필요한 데이터 구조를 대표하는 세 가지 차원의 슬로프,그리고 기능을 계산하는 기울기 벡터에 임의의 점이다.떨어져 내 머리 위로,나도 몰라 그렇게 하는 방법(처럼 보이지만 그것이 해야하기 쉽),하지만 당신은 링크를 설명하는 수학 수도 있겠다는 생각이 드네요 고맙습니다!

업데이트:

덕분에 우수한 기여 ellisbben 및 Azim,내가 계산할 수 있습 윤곽을 위한 각 임의 시점에서 필드입니다.그 실제 topo 줄을 곧 따를 것이다!

여기에 업데이트 렌더링을 사용하지 않고 빈민가 래스터 기반 topo-렌더러는 사용 했습니다.각 이미지 포함하는 천 무작위 샘플 점으로 표시 빨간 점이 있습니다.각도의 윤곽에는 지점에 의해 표현된 화이트 라인.어떤 경우에,더 기울기를 측정할 수 있에서 특정 시점(에 따라 세분화의 보간),너무 빨간 점이 발생하지 않고 해당하는 각도의 윤곽 라인입니다.

을 즐길!

(주의:이러한 렌더링을 사용하여 다른 표면 지형보다 이전 렌더링-내가 임의로 생성하는 데이터 구조에서 각 반복하는 동안,나는 프로토타이핑-그러나 코어 연출 방법은 같은,그래서 나는 확실히 당신은 아이디어를 얻을 수 있습니다.)

alt text

alt text

여기에 재미있는 사실:이상에 오른쪽 이러한 렌더링,당신은 당시의 무리는 이상한 윤곽 라인에서 완벽한 수평 및 수직 각도입니다.이러한 유물의 보간법,프로세스를 사용하는 그리드의 인텔을 줄 수의 연산(약 500%)를 수행하는 데 필요한 핵심 렌더링 작업입니다.모든 사람들의 이상한 윤곽 라인에서 발생 간의 경계 interpolator 그리드 셀입니다.

다행히도,그는 아티팩트하지 않는 실제로 문제입니다.지만 이 유물은 감지하는 동안 기울기 계산,최종 렌더러지 그들을 통지,작동하기 때문에 서로 다른 비트 깊이가 있습니다.


다시 업데이트:

Aaaaaaaand 중 하나로서 최종대 전,여기에 또 다른 쌍의 렌더링에서 하나 구"지속적인 색"스타일,그리고 하나 20000 그라데이션 샘플입니다.에서 이 설정의 렌더링하고,저거 했 red dot 지점에 대한 샘플 이후,그것은 불필요하게 복잡하게 만들 뿐 이미지입니다.

여기에서,당신은 정말 보는 사람들 보간는 유물이 내 앞서 언급한 덕분에,격자 구조물의 interpolator 컬렉션입니다.는다는 것을 강조한 것이 그들의 유물에 완전히 눈에 보이지 않는 것입에서는 최종 윤곽을 렌더링(기 때문에 차이가 크기 사이에 인접한 두 개의 interpolator 세포보다 조금 깊이의 이미지를 렌더링).

드세요!!

alt text

alt text

도움이 되었습니까?

해결책

그라데이션 을 수학적으로 운영하는 당신을 도움이 될 수 있습니다.

할 수 있는 경우를 돌려 보간으로 differentiable 기능,그라데이션의 높이는 항상 지점에서의 방향으로 가파른 상승하고 있습니다.모든 곡선의 동일한 높이에 수직으로 그라데이션의 높이 평가되는 지점입니다.

에 대한 아이디어에서 시작하여 가장 높은 지점이 합리적이지만,수도 놓치지 기능이 있는 경우 하나 이상의 지역이다.

  1. 선택 높이 값을에서는 당신이 라인을 그릴
  2. 무리를 만들의 포인트에 미세한 정기적 간격,그리드 걸어 다음 각 지점에서 작은 단계 그라데이션에서 방향을 향해 가장 가까운 높이에서 당신이 원하는 선을 그릴
  3. 성 곡선에 의한 스텝 각 지점에 수직으로 그라데이션;을 죽이고 포인트 지점을 때 다른 곡선에 너무 가까이 오면 그것--만 피하기 위해 파괴하는 센터의 모래와 같은 인물이 필요할 수 있습을 확인 사이의 각도를 중심의 벡터에 수직으로 그라데이션에 대한 모두 포인트입니다.(말할 때 중심,저는 것을 의미하는지 확인 사이의 각도 기울이고 수직으로 값을 계산하 는 항상 90 도에서 같은 방향으로.)

다른 팁

또 거기에 행진 사각형 알고리즘을 적절한 보이 당신의 문제를 수도 있지만 원하는 부드러운 결과를 사용하는 경우 거친다.

Topo 곡선에 당신을 그리는 인터랙티브 렌더링 프 의 스칼라 필드의 2 크기입니다.을 위한 인터랙티브 렌더링 프 3 차원이 있고, 행진 큐브 알고리즘이 있습니다.

에 대응하여 귀하의 코멘트@에릭슨 하고 대답을 하는 지점을 계산하는 방법에 대한 그라데이션의 기능입니다.대신 계산 파생상품의 300 장기 기능을 할 수 있는 숫자는 차별화는 다음과 같습니다.

주어진 지점이[x,y]에서 당신의 이미지를 계산할 수 있습 그라데이션(방향으로의 가파른모)

g={  ( f(x+dx,y)-f(x-dx,y) )/(2*dx), 
  {  ( f(x,y+dy)-f(x,y-dy) )/(2*dy) 

는 dx,dy 될 수 있는 간격에서 당신의 그리드.외곽선을 실행됩니다 수직으로 그라데이션합니다.그래서,방향 윤곽선,c,곱할 수 있습 g=[v,w]해서 매트릭스,A=[0-1,1 0]주기

c = [-w,v]

내가 원하는 무언가 다음과 같이 자신만을 발견하지 않으면 벡터 기반의 솔루션입니다.

래스터 기반의 솔루션을 그 나쁘지 않지만,특히 경우에 데이터를 래스터를 기반으로 합니다.경우에 데이터를 벡터 기반의무(즉,당신은 당신의 3D 모델 surface),당신이 할 수 있어야 중 일부는 실제 수학을 찾기 위해 교차로 곡선과 수평면에서 다양한 고도.

에 대한 래스터-기반 접근,볼의 각 쌍의 이웃 픽셀이 있습니다.는 경우 위의 윤곽 레벨,그리고 하나가 아래에 분명히 윤곽 라인에 사이에 실행됩니다.하게 사용하 anti-alias 윤곽 라인은 혼합하는 윤곽 라인 컬러로 모두 픽셀,비례하여 그들의 친밀감하는 이상적인 윤곽 라인입니다.

어쩌면 몇 가지 예는 것이 도움이 될 것입니다.가정은 현재의 픽셀은"높이"12ft,이웃은 고도에서 8ft,그 윤곽선이 10ft.그런 다음,거기에는 윤곽선을 사;페인트 현재 픽셀을 가진 윤곽 라인 색에서 50%를 서명합니다.다른 화 11 발하고 있는 이웃에서 6 피트입니다.컬러 현재 픽셀에서 80%명합니다.

alpha = (contour - neighbor) / (current - neighbor)

불행하게도,내가 코드가 없는 편리하게,그리고있을 수 있습니다 조금 더 그것은(나는 막연하게 기억을 찾고 이웃을 대각선도에 의해 조정 sqrt(2) / 2).이 충분히 당신을 제공하는 gist.

그것은 나에게 발생하는 무엇을 하려고 시도하고 있는 것을 아주 쉽게 할 MATLAB,를 사용하여 윤곽 기능입니다.일을 하는 다음과 같은 저밀도 근사의 윤곽을 수 있습니다 아마도 수행과 일부 상당히 단순한 후 처리의 윤곽이다.

다행히도,GNU 옥타브,MATLAB 복제,가 구현한 다양한 윤곽 플로팅 기능이다.당신이 볼 수있는 코드를 알고리즘을 구현하는 거의 확실히 수학적으로 소리입니다.또는,당신이 할 수 있는 오프로드 처리하는 옥타브.에 페이지를 확인하십시오 인터페이스로 다른 언어 하시는 경우에는 쉬울 것입니다.

공개:나는 사용하지 않은 옥타브 아주 많이,내가 실제로 하지 않았 테스트는 그것의 윤곽을 플롯.그러나 내 경험에서는 MATLAB,내가 말할 수 있는 것입니다 당신은 거의 모두 요청에서 단 몇 줄의 코드를 제공,당신은 당신의 데이터를 MATLAB.

또한,축하합니다 만들기에 매우 VanGough-억양 slopefield 줄거리입니다.

나는 항상 확인 장소 http://mathworld.wolfram.com 에 가기 전에 깊 on my own:)

어쩌면 그들의 곡선 섹션은 도움이 될?나 어쩌면 이 항목에 지도.

비교 당신이 무엇을 렌더링과 실제도-그들은 동일한다.나는 일을 변경하지 않...

데이터 기록으로 HGT 파일 (아주 간단한 디지털 방식으로 높이는 데 사용되는 데이터 포맷에 의해 USGS)및 무료로 이용과 오픈 소스 gdal_contour 도구는 윤곽을 작성하.는 매우 잘 작동하는 육지도,제약 조건이 되는 데이터 포인트는 16 비트 숫자에 맞는 세속적인 범위의 높이에서 객실을 아주 잘하지만,충분하지 않을 수 있습에 대한 데이터,나는 가정하지 않을 수도 실제 지형지만,당신이 언급하는 지형도.

내가 추천 CONREC 방법:

  • 만들어라인 세그먼트에 목록
  • 분할의 데이터로 일반 그리드 사각형
  • 에 대한 각각의 격자 광장,분리장으로 4 구성 요소 삼각형:
    • 각각형,처리하는 경우(통해 j):
      • 는 경우 라인에 십자가 세그먼트의 경우:
        • 계산의 끝점
        • 저장소인 세그먼트에 목록
  • 그리 각 라인 세그먼트에 선 세그먼트에 목록

는 경우 라인은 너무 들쭉날쭉 한,사용 작니다.는 경우 라인은 매끄러운 충분히 알고리즘은 너무 오래 사용합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top