그래프에서 모양을 제어하고 이동하는 방법을 찾고 있습니다.데이터 시각화 목적으로 JSL 스크립트를 사용하여 플롯(그래프 작성기) 전체에서 '그려진' 모양 또는 일련의 모양을 제어하고 이동하는 방법을 찾고 있습니다. 일련의 프레임을 사용한 다음 스크롤하여 움직이는 느낌을 주는 애니메이션이라고 생각하세요.
'그려진' 모양이란 다음과 같은 것을 의미합니다.
직사각형()
다음 접근 방식을 취하려고 생각했지만 이를 정확히 실행하는 방법이나 더 나은 접근 방식이 있는지 잘 모르겠습니다.
- 필요한 모양을 스크립트/그리고 이를 변수(행 값일 수 있음)와 연결합니다. 이를 프레임이라고 부릅니다.
- 서로 다른 위치에 필요한 모양을 사용하여 여러 프레임을 구성하고 각 프레임을 고유한 변수에 할당합니다.
예:
프레임 1 - 모양이 (X+0,Y) 위치에 있고 변수(v = 1)와 연결되어 있습니다.
프레임 2 - 모양이 (X+1,Y) 위치에 있고 변수(v = 2)와 연결되어 있습니다.
프레임 3 - 모양이 위치(X+2,Y)에 있고 변수(v = 3)와 연결되어 있습니다.
- 로컬 데이터 필터를 사용하여 선택된 변수와 그려진 모양의 위치를 스크롤합니다.
내 예에서 설명된 것처럼 이것이 X+ 방향으로 움직이는 모양의 인상을 주기를 바랍니다.
앞서 언급한 대로 이것이 작동할지 확신할 수 없으므로, 선택한 변수가 변경될 때 새 그림 대신 이전 그림을 제거(덮어쓰기)하려면 어떻게든 그래프 빌더 보고서를 업데이트/새로 고쳐야 합니다.
나는 이와 같은 것이 가능한지, 어떻게 코딩할 수 있는지 알고 싶습니다.
자동화 및 스크립팅데이터 탐색 및 시각화Re: 그래프에서 모양을 제어하고 이동하는 방법을 찾고 있습니다.시각화하려는 대상에 대해 더 나은 예를 제공할 수 있습니까? 예를 들어 JMP에는 프레임박스의 커서 위치를 기반으로 사물을 그릴 수 있는 Mousetrap()이 있습니다.
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
gb = dt << Graph Builder(
Variables(X(:weight), Y(:height), Overlay(:sex)),
Elements(Points(X, Y, Legend(9)), Line Of Fit(X, Y, Legend(11)))
);
exx = 70;
exy = 70;
Report(gb)[FrameBox(1)] << Add Graphics Script(
Mousetrap(
exx = x;
exy = y;
);
Rect({exx - 10, exy - 10}, {exx, exy});
);
</CODE></P>
<P> </P></LINGO-BODY><LINGO-SUB id="lingo-sub-751817" slang="en-US" mode="CREATE">Re: 그래프에서 도형을 제어하고 이동하는 방법을 찾고 있습니다.</LINGO-SUB><LINGO-BODY id="lingo-body-751817" slang="en-US" mode="CREATE"><PRE><CODE class=" language-jsl">x1 = y1 = x2 = y2 = 0;
keepRunning=1;
New Window( "Example", gb = Graph Box( Frame Size( 800, 800 ), Oval( x1, y1, x2, y2 ) ), <<ONCLOSE></ONCLOSE>
<P></P><iframe src="https://players.brightcove.net/6058004218001/default_default/index.html?videoId=6352215904112" width="960" height="540" allowfullscreen allow="encrypted-media"></iframe>Looks like some rusty physics.<P></P>
Re: 그래프에서 도형을 제어하고 이동하는 방법을 찾고 있습니다.정말 깔끔해요.
나는 이것에 대한 용도를 찾을 수 있다고 생각합니다. 그것이 어떻게 작동하는지 알아보고 싶습니다.
나는 이제 초기 문제에 대해 좀 더 수동적인 접근 방식을 취하고 싶습니다. Craige의 예에서처럼 시간이 지남에 따라 모양 속도, 가속도를 제어할 수 있다는 것을 몰랐습니다.
Re: 그래프에서 도형을 제어하고 이동하는 방법을 찾고 있습니다.이건 정말 좋아 보입니다. 제가 추구하는 것이 바로 이것이라고 생각합니다. 시간 중심으로 진행되는 방식이 정말 맘에 듭니다.
다음과 같이 보다 복잡한 도면에 이 기능을 적용할 수 있습니까?
채우기 색상( RGB 색상( 255, 0, 0 ) );
직사각형(50, 90, 60, 80, 1);
채우기 색상( RGB 색상( 204, 0, 0 ) );
직사각형(51, 89, 59, 81, 1);
채우기 색상( RGB 색상( 255, 0, 0 ) );
다각형({59, 89}, {60, 90}, {50, 90}, {51, 89});
채우기 색상( RGB 색상( 153, 0, 0 ) );
다각형({60, 80}, {59, 81}, {51, 81}, {50, 80});
튀는 것보다는 모양의 바닥이 X축에 닿았을 때 멈춰서 제자리에 머물 수 있도록 하고 싶습니다.
또한, 주어진 시간이 경과한 후에는 다른 모양 그리기가 화면에 들어가서 동일한 경로를 따르도록 하고 각 모양은 X축에 고정되기를 바랍니다.
보내주신 스크립트를 가지고 놀았지만 올바른 방법으로 수정하는 방법을 잘 모르겠습니다. 정말 영리합니다!!!
Re: 그래프에서 도형을 제어하고 이동하는 방법을 찾고 있습니다.예, 그렇게 할 수 있습니다. 귀하의 개체가 단단한 모양을 갖고 있고 어떤 조건이 충족되면 즉시 멈추기를 원하는 것처럼 들립니다. 점차적으로 속도를 늦추거나 왜곡하지 마십시오. 그리고 시간이 지남에 따라 출시될 수 있는 여러 개체가 있을 것 같습니다. 객체당 행이 하나씩 있고 열 이름이 다음과 유사한 데이터 테이블을 사용하겠습니다.
Xpos Ypos Xvel Yvel XdeltaVel TdeltaVel IsActive IsDrawing Color Size Shape
그런 다음 UpdateRow( 행 번호, deltaTime ) 및 DrawRow( 행 번호 )라는 두 가지 함수를 작성합니다. UpdateRow는 다음과 유사할 수 있습니다(테스트되지 않았으나 거의 맞음...).
UpdateRow = function({rowNumber, deltaTime}
if( dtQ:isActive[rowNumber],
dtQ:Xpos[rowNumber] += dtQ:Xvel[rowNumber] * deltaTime;
dtQ:Ypos[rowNumber] += dtQ:Yvel[rowNumber] * deltaTime;
// you might want the velocity to change as well, possibly using the deltaVelocity,
// make sure the Xs and Ys stay together
// do a test to see if still active
if( dtQ:y[rowNumber] <= 0, // whatever condition makes it stop
dtQ:isActive[rowNumber] = 0;
dtQ:isDrawing[rowNumber] -= 1; // count down until vanishes
)
}
When you add a row to the table (dtQ, above, I tend to use dt for a table not delta time!) make sure to set the row's value for isActive to 1, and if you want the non-active objects to eventually expire, set the isDrawing to 100 or 1000 to control how many cycles go by before it stops drawing.
DrawRow 함수는 다음과 같습니다.
DrawRow = function({RowNumber},
if( dtQ:isDrawing[RowNumber],
// your code goes here. Add the dtQ:Xpos[RowNumber] to your X coords
// and same for Ypos/Y.
// .... use the color/size/shape values from the row if you find them useful
)
);
이제 그래픽 스크립트는 dtQ에 대한 한 쌍의 루프가 되며, 첫 번째는 업데이트를 적용하고 두 번째는 그리기를 수행합니다. 이들을 분리된 상태로 유지할 필요는 없지만 나중에 충돌을 처리하기로 결정한 경우 도움이 될 수 있습니다.
이 예에서 dtQ의 데이터 테이블은 xpos, ypos, 색상, 크기, 모양 값을 플로팅하여 그래프 빌더로 표시할 수도 있습니다. GraphBuilder는 자동으로 업데이트되므로 DrawRow 기능이 필요하지 않습니다. 나는 그것을 사용한 적이 없지만 점에 대한 사용자 정의 모양 그리기 메커니즘이 있을 수 있다고 생각합니다.
대화형 실시간 디스플레이가 아닌 비디오를 만들려는 경우 30 또는 60FPS로 설정하고 프레임마다 델타 시간이 일정하게 유지되도록 하십시오. 위에서는 내 컴퓨터에서 작동하도록 하는 숫자를 선택했습니다. 하지만 1/30을 선택하여 번호가 매겨진 이미지 세트를 만들면 매우 부드러운 영상이 만들어질 것입니다.