this programming game के संदर्भ में मैं वर्तमान में निर्माण कर रहा हूं।डब्ल्यूपीएफ: घूर्णन के बाद नए निर्देशांक प्राप्त करना
alt text http://img12.imageshack.us/img12/2089/shapetransformationf.jpg
WPF में एक कैनवास अनुवाद करने के लिए, मैं दो रूपों का उपयोग कर रहा: TranslateTransform
(इसे स्थानांतरित करने के लिए), और RotateTransform
(उसे घुमाने के लिए)
[एक हीTransformationGroup
की बच्चों] जब मैं घुमाया नहीं जाता (या 90 डिग्री पर घुमाया जाता है, तो यह एक ही कैनवास के शीर्ष बाएं x, y निर्देशांक आसानी से प्राप्त कर सकता है, क्योंकि यह वही होगा), लेकिन जिस समस्या का सामना कर रहा हूं वह शीर्ष बाएं (और अन्य 3 अंक) प्राप्त कर रहा है। समन्वय करता है।
यह जब एक RotateTransform
, लागू किया जाता है, क्योंकि है TranslateTransform
के X
और Y
गुण नहीं बदल रहे हैं (और इस प्रकार अभी भी संकेत मिलता है कि बिंदीदार वर्ग की तरह ऊपर-बाईं ओर वर्ग की है (छवि से)
कैनवास अपने केंद्र से घुमाया जा रहा है, ताकि अपने मूल है।
तो मैं कैसे प्राप्त कर सकते हैं 'नई' एक्स और 4 अंक के y निर्देशांक एक रोटेशन के बाद?
[अद्यतन]
alt text http://img25.imageshack.us/img25/8676/shaperotationaltransfor.jpg
मैं खोजने के लिए एक रास्ता मिल गया है ऊपरी बाएं भाग (के रूप में आप नई छवि से देख सकते हैं) एक रोटेशन के बाद निर्देशांक रोटेशन से OffsetX और OffsetY जोड़कर प्रारंभिक एक्स और वाई निर्देशांक के लिए।
लेकिन अब मुझे शेष निर्देशांक (अन्य 3) को समझने में परेशानी हो रही है।
इस घुमावदार आकार के साथ, मैं शेष 3 कोनों के एक्स और वाई निर्देशांक कैसे प्राप्त कर सकता हूं?
[संपादित करें]
2 छवि में अंक सटीक और सही अंक नहीं हैं। मैंने अपने सिर में अनुमानों के साथ अंक बनाये।
[अद्यतन] समाधान:
सबसे पहले, मुझे लगता है कि लंबी और बहुत जानकारीपूर्ण पोस्ट जिसमें उन्होंने पूरी प्रक्रिया के पीछे गणित का वर्णन के लिए Jason S धन्यवाद देना चाहते हैं; मैंने निश्चित रूप से आपकी पोस्ट पढ़कर और मूल्यों को आजमाकर बहुत कुछ सीखा।
लेकिन अब मैं एक कोड का टुकड़ा (EugeneZ के TransformBounds
का उल्लेख करने के लिए धन्यवाद) है कि वास्तव में करता है जो मैं चाहता पाया है:
public Rect GetBounds(FrameworkElement of, FrameworkElement from)
{
// Might throw an exception if of and from are not in the same visual tree
GeneralTransform transform = of.TransformToVisual(from);
return transform.TransformBounds(new Rect(0, 0, of.ActualWidth, of.ActualHeight));
}
संदर्भ: http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/86350f19-6457-470e-bde9-66e8970f7059/
आप सबसे आसान तरीका है http://stackoverflow.com/a/22511805/2106820 –