Đây là câu hỏi về tạo hình ảnh hoặc bất kỳ đại diện nào khác cho một tập hợp song song dữ liệu. Không phải là về vẽ hoặc lập trình GUI nhưng tính toán vị trí. Đầu tiên tôi sẽ giải thích một chút nơi tôi đứng ngay bây giờ và hình ảnh thứ hai và ví dụ cho thấy vấn đề của tôi.Tạo biểu diễn tuyến tính, dựa trên dòng thời gian từ các mục tiêu tốn thời gian và các mục không, nhưng vẫn cần không gian để vẽ trên
Trạng thái hiện
exampleOne-Easy http://www.wargsang.de/text3935.png
tôi có các đối tượng một chiều nhưng họ được liên kết bằng cách đặt chúng trên song song "dòng". Hãy gọi các đối tượng "sự kiện" một chiều này có "Thời lượng" là một đơn vị thời gian. Những sự kiện này có một biến thể không có gì xảy ra, các đối tượng không có dữ liệu nhưng có thời lượng; Một "khoảng cách" -object.
Vì vậy, chúng tôi nhận được một thời gian biểu với các đối tượng simulatanious bao gồm các sự kiện và khoảng trống, đó là khá dễ dàng để xử lý như ba danh sách các đối tượng. Hình ảnh cũng đơn giản: Lặp qua danh sách và vẽ từng đối tượng theo thời lượng của nó.
class Event():
def __init__(self, duration, displacement = 0): #displacement is explained in the second example and the core problem of this question
self.duration = duration
self.displacement = displacement
#additional data
def self.draw(self, start_coordinate):
"""draw duration * 10 pixels in black"""
#drawing code using start_coordinate to place the drawn object. see example graphic
return duration * 10
class Gap():
def __init__(self, duration, displacement = 0):
self.duration = duration
self.displacement = displacement
#no data
def self.draw(self, start_coordinate):
"""draw duration * 10 pixels in transparent"""
#drawing code using start_coordinate to place the drawn object. see example graphic
return duration * 10
row_one = [Event(1), Gap(1), Event(1), Gap(1), Event(1), Gap(1), Event(2)]
row_two = [Event(1), Gap(2), Event(1), Event(1), Gap(1), Event(1), Gap(1), ]
row_thr = [Gap(1), Event(1), Gap(1), Event(1), Gap(1), Event(3),]
timetable = [row_one, row_two, row_thr]
for row in timetable:
pixelcounter = 0 # the current position.
for item in row:
ret = item.draw(pixelcounter) #draw on the current position. Get how width the item was
pixelcounter += ret #save width for the next iteration
#instructions to move the "drawing cursor" down a few pixels so the next row does not overlap.
Vấn đề
Bây giờ đến vấn đề này. Có những đối tượng cần một không gian đồ họa nhưng có thời lượng bằng không. Tôi gọi đây là "Displacement".
exampleTwo-Problematic http://www.wargsang.de/text4120.png
Hoặc chúng ta cần đối tượng có thời gian mà còn có dịch chuyển. Điều này vẫn không phải là vấn đề khi chúng tôi chỉ có một hàng duy nhất, nhưng việc đồng bộ hóa các hàng phức tạp hơn và tôi không có giải pháp cho việc này.
Trong hình ở trên, các khối màu đỏ có thời lượng bằng 0 và được di dời. Các khối màu xanh có thời gian và cũng bị dịch chuyển.
Ví dụ: * Hãy tưởng tượng thời gian biểu cho hội nghị với khe loa khác nhau mỗi giờ (khoảng thời gian của chúng tôi). Mỗi hàng đại diện cho một phòng hội nghị khác nhau.
Các khối màu đen là các bài phát biểu và có thể có một chủ đề ngắn được viết bên trong chúng (đồ họa).
Khối màu xanh cũng là bài phát biểu, nhưng chủ đề quá dài để viết nên chúng tôi cần thêm không gian một lần.
Màu đỏ là các ghi chú như thay đổi số phòng. Họ không mất thời gian của riêng họ nhưng liên quan đến tất cả các mục mà đến sau họ. *
Nhiệm vụ là tìm cách để tính toán pixelcounter từ chức năng ở trên để nó đúng cho mỗi hàng một mình nhưng cũng là sự dịch chuyển trong một hàng ảnh hưởng đến tất cả các hàng khác và tạo thêm không gian ở đó. Mục tiêu là thời lượng được cố định và căn chỉnh trong mỗi hàng. Bất kỳ sự kiện hoặc khoảng cách nào cần bắt đầu, ví dụ, đơn vị đếm 4, sẽ bắt đầu ở cùng một vị trí tuyệt đối.Điều này có nghĩa là bất kỳ đối tượng không có thời gian/chuyển vị trí nào bắt đầu tại một điểm thực trong thời gian/thời lượng nhưng không tiêu thụ bất kỳ thời gian/khoảng thời gian nào để tất cả các mục tiếp theo bắt đầu trên cùng một khoảng thời gian cho đến khi sự kiện thời gian thực tiếp theo là bao gồm. Từ một quan điểm khác cũng có nghĩa là các mục thời lượng không bắt đầu luôn trước các sự kiện có thời lượng.
Trong hình, chúng ta có thể thấy một trường hợp khá đơn giản trong cột 2, điều này cũng có nghĩa là điều này bắt đầu khe thời gian thứ hai. Mặc dù có ba sự kiện thực sự trong cột đó được dịch chuyển sang bên phải bởi vì một mục thay thế ở đó. Cột 4 có một mục thời gian có chuyển vị là tốt. Một lần nữa, tất cả các mục bắt đầu trong khe 5 được dịch chuyển sang phải. Colum 6 là điều thú vị nhất và vấn đề thực sự của tôi, tôi không thể tìm thấy giải pháp ở đây. Một lần nữa, tất cả các sự kiện thực sự trong cột 6 được chuyển sang bên phải và vẫn bắt đầu cùng một lúc. Nhưng ở đây chúng ta có a) Displacement-Objects trong hai hàng và hai b) hai đối tượng ngay phía sau nhau. Vì vậy, điều quan trọng là các sự kiện thực sự phải biết chuyển hoàn toàn nhưng cũng quan trọng đối với đối tượng thứ hai ở hàng thứ ba để biết rằng có thêm một vật chuyển vị trước đó.
Cảnh báo: Biểu diễn đồ họa có thể đề xuất phương pháp dựa trên bảng trong đó mỗi cột có chiều rộng riêng. Nhưng đây là nơi mà ví dụ này kết thúc. Các ứng dụng thực sự giao dịch với thời gian phổ biến là 300-10.000 cho mỗi sự kiện nhưng thời lượng của 1 là khó nhưng về mặt kỹ thuật có thể. Vì vậy, bảng sẽ có chiều rộng cột của một thời lượng. Xem xét chúng tôi đã đi vào hàng trăm ngàn thời gian hoàn thành (lần số hàng) điều này có thể kéo xuống hiệu suất.
Dữ liệu của ảnh này sẽ trông như thế này. Làm thế nào tôi có thể vẽ hình ảnh thứ hai với dữ liệu này? Hoặc những gì cần phải được thay đổi, tôi mở cho tất cả các đề xuất.
Cảm ơn bạn rất nhiều vì đã dành thời gian và sự quan tâm của bạn. Nếu bạn không biết một giải pháp, xin đừng ngần ngại hỏi tôi những câu hỏi hoặc cho tôi thấy những sai lầm trong quan điểm của tôi, nó cũng sẽ giúp tôi suy nghĩ.
row_one = [ Event(1), #1
Event(0,1), Event(1), #2
Gap(1), #3
Event(1), #4
Gap(1), #5
Event(0,1), Event(1), #6
Event(1), #7
]
row_two = [ Event(1), #1
Event(1), #2
Gap(1), #3
Event(1, 0.5), #4, 0,5 is not important. we can also simply to just ints. The important bit is that it has both values.
Event(1), #5
Event(1), #6
Event(1), #7
]
row_thr = [ Event(1), #1
Event(1), #2
Event(1), #3
Event(1), #4
Event(1), #5
Event(0,1), Event(0,1), Event(1), #6 #Please pay attention to this case.
Event(1), #7
]
Vâng, trước tiên, bạn có chắc chắn bạn phải có không gian cho họ? Bạn có thể vẽ chúng khác nhau, thay vì các thanh thời gian có một số cách khác để hiển thị chúng. –
Đáng buồn thay, có, tôi cần tất cả chúng trên một hàng. – nilsge
Cho tất cả các đối tượng có số hàng, chiều rộng và chiều rộng đồ họa: bạn sẽ cần phải tìm các vị trí đồ họa cho từng đối tượng, sao cho tất cả các hàng đều phù hợp với đồ họa (không có chồng chéo) và tất cả các lần bắt đầu giống nhau Chức vụ. Đúng không? – Ishtar