使用For循環創建矩形網格嗨,
我想在新窗口中創建一個24x2矩形的數組。我可以使用圖框的JSL命令手動創建這些,但我知道可以使用for循環來完成它,這會更快。我現在只需要將矩形作為兩個維度,以下是我試圖實現的以下代碼:
y1 = 5;
y2 = 10;
win = New Window("Spine",
gb = Graph Box(
Frame Size(1000,1000),
)
);
For(i = 0, i<24, i++,
Rect(5,y1,10,y2);
y1 = y2+1;
y2 = y1+5;
gb<<reshow;
);但它似乎沒有工作,也沒有給我任何錯誤。謝謝你的幫助。
Re:使用For循環創建矩形網格在我的例子中,我打算讓點數始終相同,但是浮點舍入錯誤會產生這個代碼
for(y=y0,y<=y1,y+=(y1-y0)/16
有時產生16對17步。寫這個的更好方法看起來像這樣:
nsteps = 16;
for( iy = 0, iy <= nsteps, iy += 1,
y = y0 + iy * (y1 - y0) / nsteps;
您可以輕鬆地修改該循環以省略角點而不是重複(三次重複?)它們... for(iy = 1,iy Re:使用For循環創建矩形網格
涼
Re:使用For循環創建矩形網格如果您不需要太多,可以在不學習OpenGL的情況下製作3D立方體。它實際上用點數繪製輪廓線,因此點數可以很快失控並且速度太慢。此示例使用12K點並仍然表現良好。
立方體3D矩陣
// make cube outlines using scatter plot points
dt = New Table( "cubes", New Column( "xx" ), New Column( "yy" ), New Column( "zz" ) );
make cube = function({dt,x0,x1,y0,y1,z0,z1},{x,y,z},
if(x1<X0></X0>Re:使用For循環創建矩形網格我沒有練習使用JMP的OpenGL訪問,所以我無法回答你有關它有多少圖形環境的問題。
關於您的其他問題,我將向您介紹隨JMP一起發布的示例腳本,它將向您展示如何使用3D場景打開整個3D功能世界。 特別是,我將指出MatrixRotation和PatchEditor腳本,其中代碼具有用於檢測已繪製內容的反饋循環,並允許操縱這些對象。
要訪問樣本,只需轉到
幫助==>示例數據
然後從打開的窗口中選擇“打開示例腳本目錄”
Re:使用For循環創建矩形網格謝謝!工作得很好。有沒有辦法檢索用於創建矩形作為矩陣的點?有沒有一種簡單的方法可以使用JSL的OpenGL實現將這個想法擴展到3維?
Re:使用For循環創建矩形網格Graph Box()是動態的,當與代碼結合使用時,每次嘗試刷新屏幕時,y值都會增加。 請參閱下面的代碼以獲取該問題的修復程序
Names Default To Here( 1 );
win = New Window( "Spine",
gb = Graph Box(
Frame Size( 1000, 1000 ),
Y Scale( 0, 500 ),
X Scale( 0, 500 ),
For( i = 1, i < 25, i++,
If( i == 1,
y1 = 5;
y2 = 0;
);
Rect( 45, y1, 50, y2 );
Rect( 50, y1, 55, y2 );
y2 = y1 + 1;
y1 = y1 + 6;
)
)
);Re:使用For循環創建矩形網格謝謝!到目前為止,我有這個,它有點工作,但是將矩形放在y~125的位置而不是y = 5和y = 0。關於為什麼會這樣的任何想法?
Names Default to Here(1);
y1 = 5;
y2 = 0;
win = New Window("Spine",
gb = Graph Box(
Frame Size(1000,1000),
Y Scale(0,500),
X Scale(0,500),
For(i=1,i<25,i++,
Rect(45,y1,50,y2);
Rect(50,y1,55,y2);
y2 = y1+1;
y1 = y1+6;
);
)
);Re:使用For循環創建矩形網格有幾個問題。
1。代碼中的“rect”位於Graph Box()之外,因此他們不知道應用矩形的位置。
2。您的X和Y軸規格超出了Graph Box()的範圍。
以下是一些可以幫助您開始使用的入門代碼
Names Default To Here( 1 );
y1 = 5;
y2 = 10;
win = New Window( "Spine",
gb = Graph Box(
Frame Size( 1000, 1000 ),
For( i = 0, i < 5, i++,
Rect( 5,y1, 10,y2);
y1 = y2 + 1;
y2 = y1 + 5;
);
)
);