पर स्थान तैयार करने की आवश्यकता है, यह समानांतर के सेट के लिए एक छवि, या कोई अन्य प्रतिनिधित्व उत्पन्न करने के बारे में एक प्रश्न है डेटा। ड्राइंग या जीयूआई प्रोग्रामिंग के बारे में नहीं है लेकिन गणना की स्थिति है। सबसे पहले मैं थोड़ा सा समझाऊंगा जहां मैं अभी खड़ा हूं और दूसरी छवि और उदाहरण मेरी समस्या दिखाता है।उन वस्तुओं से एक रैखिक, समयरेखा-आधारित, प्रतिनिधित्व उत्पन्न करना जो समय और वस्तुओं का उपभोग नहीं करते हैं, लेकिन अभी भी
वर्तमान स्थिति
exampleOne-Easy http://www.wargsang.de/text3935.png
मैं एक आयामी वस्तुओं है, लेकिन वे समानांतर पर उन्हें रखने "लाइनों" से गठबंधन कर रहे हैं। चलिए इस एक-आयामी वस्तुओं को "घटनाओं" कहते हैं जिनके पास समय की इकाई के रूप में "अवधि" होती है। इन घटनाओं में एक भिन्नता है जहां कुछ नहीं होता है, बिना किसी डेटा के ऑब्जेक्ट्स; एक "अंतराल" --object।
इसलिए हमें घटनाओं और अंतराल से युक्त सिमुलेटियस ऑब्जेक्ट्स के साथ एक समय सारिणी मिलती है, जो वस्तुओं की तीन सूचियों के रूप में संभालना बहुत आसान है। विज़ुअलाइज़ेशन भी सरल है: सूचियों पर लूप करें और प्रत्येक ऑब्जेक्ट को अपनी अवधि के अनुसार खींचें।
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.
समस्या
अब समस्या का। ऐसी वस्तुएं हैं जिन्हें ग्राफ़िकल स्पेस की आवश्यकता होती है लेकिन शून्य अवधि होती है। मैं इसे "विस्थापन" कहता हूं।
exampleTwo-Problematic http://www.wargsang.de/text4120.png
या हम जिन वस्तुओं पर अवधि है, लेकिन यह भी विस्थापन है की जरूरत है। यह अभी भी एक समस्या नहीं है जब हमारे पास केवल एक पंक्ति है, लेकिन पंक्तियों को सिंक्रनाइज़ करना अधिक जटिल है और मेरे पास इसका समाधान नहीं है।
लाल ब्लॉक के ऊपर की तस्वीर में शून्य अवधि होती है और विस्थापित होती है। ब्लू ब्लॉक की अवधि होती है और भी विस्थापित होती है।
उदाहरण: * विभिन्न वक्ता स्लॉट प्रत्येक घंटे (हमारे अवधि-स्लॉट) के साथ एक सम्मेलन के लिए एक समय सारिणी की कल्पना करें। प्रत्येक पंक्ति एक अलग सम्मेलन कक्ष का प्रतिनिधित्व करता है।
काले ब्लॉक भाषण हैं और शायद उनके भीतर एक संक्षिप्त विषय लिखा है (ग्राफिकल)।
ब्लू ब्लॉक भाषण भी हैं, लेकिन विषय लिखने में बहुत लंबा था इसलिए हमें एक बार और अधिक जगह चाहिए।
लाल कमरे के नंबर की तरह नोट्स हैं। वे अपने स्वयं के समय लेने के लिए नहीं है, लेकिन सभी आइटम जो उन्हें बाद आने के लिए संबंधित हैं। *
कार्य इतना है कि यह प्रत्येक पंक्ति के लिए सही है ऊपर समारोह से pixelcounter Calulate के लिए एक रास्ता मिल रहा है अकेले लेकिन यह भी कि एक पंक्ति में विस्थापन अन्य सभी पंक्तियों को प्रभावित करता है और वहां अतिरिक्त जगह बनाता है। लक्ष्य यह है कि प्रत्येक पंक्ति में अवधि तय और गठबंधन की जाती है। किसी भी घटना या अंतर को शुरू करना चाहिए, उदाहरण के लिए, इकाई-गणना 4, एक ही पूर्ण स्थिति पर शुरू होना चाहिए।
इसका मतलब है कि किसी भी शून्य-अवधि/विस्थापन वस्तु समय/अवधि में वास्तविक बिंदु पर शुरू होती है लेकिन किसी भी समय/अवधि का उपभोग नहीं करती है ताकि सभी आगामी आइटम उसी अवधि तक शुरू हो जाएं जब तक कि अगले वास्तविक अवधि की घटना न हो शामिल थे। किसी अन्य बिंदु से इसका अर्थ यह भी है कि शून्य अवधि की अवधि हमेशा की घटनाओं से पहले शुरू होती है।
तस्वीर में हम कॉलम 2 में एक साधारण मामला देख सकते हैं, जिसका अर्थ है कि यह दूसरी अवधि स्लॉट शुरू करता है। घटनाक्रम में उस कॉलम में तीन वास्तविक घटनाएं हैं जिन्हें दाईं ओर स्थानांतरित किया गया है क्योंकि एक विस्थापन वस्तु वहां है। कॉलम 4 में एक अवधि वस्तु है जिसमें विस्थापन भी है। दोबारा, स्लॉट 5 में शुरू होने वाली सभी वस्तुओं को दाईं ओर स्थानांतरित कर दिया गया है। कॉलम 6 सबसे दिलचस्प और मेरी असली समस्या है, मुझे यहां कोई समाधान नहीं मिल रहा है। फिर, कॉलम 6 में सभी वास्तविक घटनाओं को दाएं स्थानांतरित कर दिया गया है और फिर भी एक ही समय में शुरू होता है। लेकिन यहां हमारे पास एक है) विस्थापन-ऑब्जेक्ट्स दो पंक्तियों में और दो बी) एक दूसरे के पीछे दो वस्तुएं। इसलिए वास्तविक घटनाओं के लिए पूर्ण विस्थापन को जानना महत्वपूर्ण है, लेकिन तीसरी पंक्ति में दूसरी वस्तु के लिए भी महत्वपूर्ण है यह जानना कि इससे पहले एक और विस्थापन वस्तु है।
चेतावनी: ग्राफिकल प्रतिनिधित्व तालिका-आधारित दृष्टिकोण का सुझाव दे सकता है जहां प्रत्येक कॉलम की व्यक्तिगत चौड़ाई होती है। लेकिन यह वह जगह है जहां यह उदाहरण समाप्त होता है। असली एप्लिकेशन 300-10,000 प्रति घटना की सामान्य अवधि के साथ सौदा करता है लेकिन 1 की अवधि संभव नहीं है लेकिन तकनीकी रूप से संभव है। तो तालिका में एक अवधि की कॉलम-चौड़ाई होगी। ध्यान दें कि हमें सौ हजार पूर्ण अवधि (पंक्तियों की संख्या बार) मिल गई है, यह प्रदर्शन को खींच सकता है।
इस तस्वीर का डेटा इस तरह दिखेगा। मैं इस डेटा के साथ दूसरी छवि कैसे आकर्षित कर सकता हूं? या क्या बदलने की जरूरत है, मैं सभी सुझावों के लिए खुला हूं।
आपके समय और रुचि के लिए बहुत बहुत धन्यवाद। यदि आपको समाधान नहीं पता है तो कृपया मुझे प्रश्न पूछने में संकोच न करें या मुझे मेरी अवधारणा के दोष दिखाएं, इससे मुझे भी सोचने में मदद मिलेगी।
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
]
ठीक है, सबसे पहले, क्या आप वाकई उनके लिए जगह रखना चाहते हैं? समय-बार के बजाय उन्हें प्रदर्शित करने के कुछ अन्य तरीकों के बजाय आप उन्हें अलग-अलग आकर्षित कर सकते हैं। –
अफसोस की बात है, हाँ, मुझे उन सभी को एक पंक्ति पर चाहिए। – nilsge
पंक्ति संख्या वाले सभी ऑब्जेक्ट्स को देखते हुए, एक ग्राफिकल चौड़ाई और समय चौड़ाई: आपको प्रत्येक ऑब्जेक्ट के लिए ग्राफ़िकल स्थिति ढूंढनी होगी, जैसे कि सभी पंक्तियां ग्राफ़िक रूप से फिट नहीं होतीं (कोई ओवरलैप नहीं) और सभी समान प्रारंभिक ग्राफिकल पर शुरू होते हैं पद। क्या वो सही है? – Ishtar