2011-08-14 23 views
6

Tôi muốn sử dụng một cặp thanh trượt để thiết lập các giá trị nguyên cho hai biến NLONhi, mỗi trong số đó cá nhân có thể dao động từ 1 đến 100, nhưng chịu sự hạn chế đó Nhi> = NLO. Vì vậy, tôi thiết lập một thanh trượt cho mỗi biến có một phạm vi mà phụ thuộc động trên biến khác:Làm thế nào để duy trì các giá trị số nguyên trong thanh trượt động liên kết?

nLo = 1; nHi = 100; 
Column[ 
{ 
    Labeled[Slider[Dynamic[nLo], {1, Dynamic[nHi], 1}, 
      Appearance -> "Labeled"], "nLo", Left 
    ], 
    Labeled[Slider[Dynamic[nHi], {Dynamic[nLo], 100, 1}, 
      Appearance -> "Labeled"], "nHi", Left 
    ], 
    Dynamic[{nLo, nHi}] 
} 
] 

Vấn đề là ngay sau khi tôi điều chỉnh Nhi, giá trị của nó trở nên thực tế (hiển thị với một số thập phân điểm) thay vì số nguyên. Tôi đoán rằng điều này là do thanh trượt cho nHi không thể cho biết đối số phạm vi đầu tiên Động [nLo] thực sự là một số nguyên và do đó mặc định là giá trị thực. Bất kỳ đề xuất nào về cách buộc nHi giữ nguyên giá trị? (Linux Mathematica v8.0.1)

Trả lời

3

Hoặc là tôi không hiểu các yêu cầu của giải pháp, hoặc mã này chỉ có thể hoạt động tốt trong Mathematica 7.


Thú vị vấn đề. Điều này dường như làm việc:

nLo = 1; nHi = 100; 
Column[{Labeled[ 
    Slider[Dynamic[nLo], {1, Dynamic[nHi], 1}, 
    Appearance -> "Labeled"], "nLo", Left], 
    Labeled[Slider[ 
    Dynamic[nHi], {Dynamic[[email protected]@nLo], 100, 1}, 
    Appearance -> "Labeled"], "nHi", Left], 
    Dynamic[{nLo, nHi}]}] 
+0

@Leonid tôi không/không có nhiều thời gian cho việc này, nhưng thanh trượt xuất hiện để được liên kết đối với tôi. Có lẽ tôi hiểu lầm. –

+0

@Leonid, tôi đã xem xét điều này, và tôi vẫn không thấy nó thất bại ở đâu. Nó làm phiền tôi rằng tôi có thể bị mù; bạn vui lòng thử lại để giải thích làm thế nào giải pháp của tôi có chức năng khác với Heike? –

+0

** Có vẻ như tôi đã sai và giải pháp hoạt động hoàn hảo. Xin lỗi vì chuyện đó. + 1 ** –

6

Hoặc bạn có thể làm điều gì đó như

nLo = 1; nHi = 100; 
Column[{Labeled[ 
    Slider[Dynamic[nLo], {1, Dynamic[nHi], 1}, 
    Appearance -> "Labeled"], "nLo", Left], 
    Labeled[Slider[ 
    Dynamic[nHi, (nHi = Round[#]) &], {Dynamic[nLo], 100, 1}, 
    Appearance -> "Labeled"], "nHi", Left], 
    {Dynamic[nLo], Dynamic[nHi]}}] 
+0

Giải pháp này hoạt động hoàn hảo! Cám ơn rất nhiều. – renormalize

+1

+1 Thật tuyệt khi biết rằng việc sử dụng đối số thứ hai của 'Dynamic' này được giải thích trong Hướng dẫn động tại http://reference.wolfram.com/mathematica/tutorial/IntroductionToDynamic.html trong phần có tiêu đề thích hợp" The Second Đối số của động ". –

Các vấn đề liên quan