मैंने svg2paths2 का उपयोग किया है, और यह पता लगाना चाहता हूं कि एक सर्कल की स्थिति और त्रिज्या क्या है, मैंने देखा है कि सर्कल 4 क्यूबिकबेजियर द्वारा बनाया गया है, जैसा कि निम्नानुसार है:

Path(CubicBezier(start=(127.773+90.5469j), control1=(127.773+85.7656j), control2=(123.898+81.8906j), end=(119.121+81.8906j)),
 CubicBezier(start=(119.121+81.8906j), control1=(114.34+81.8906j), control2=(110.465+85.7656j), end=(110.465+90.5469j)),
 CubicBezier(start=(110.465+90.5469j), control1=(110.465+95.3281j), control2=(114.34+99.1992j), end=(119.121+99.1992j)),
 CubicBezier(start=(119.121+99.1992j), control1=(123.898+99.1992j), control2=(127.773+95.3281j), end=(127.773+90.5469j)))

मैंने मानक दृष्टिकोण पढ़ा है कि सर्कल को चार बराबर वर्गों में विभाजित करना है, और प्रत्येक अनुभाग को क्यूबिक बेज़ियर वक्र में फिट करना है।

तो मैं सोच रहा था कि क्या यह कहना सही है कि वृत्त की त्रिज्या है

(q1.start.real - q3.start.real)/2

या

(q2.start.imag - q4.start.imag)/2

और वृत्त का केंद्र है:

c_x = (q1.start.real + q1.end.real) / 2
c_y = (q1.start.imag + q1.end.imag) / 2

शुक्रिया!

0
JammingThebBits 1 सितंबर 2020, 03:04

1 उत्तर

सबसे बढ़िया उत्तर

मैं मान रहा हूँ कि आप अजगर में svg.path लाइब्रेरी का उपयोग कर रहे हैं, या svg2paths2 संबंधित है।

from svg.path import Path, Line, Arc, CubicBezier, QuadraticBezier, Close

path = Path(CubicBezier(start=(127.773+90.5469j), control1=(127.773+85.7656j), control2=(123.898+81.8906j), end=(119.121+81.8906j)),
 CubicBezier(start=(119.121+81.8906j), control1=(114.34+81.8906j), control2=(110.465+85.7656j), end=(110.465+90.5469j)),
 CubicBezier(start=(110.465+90.5469j), control1=(110.465+95.3281j), control2=(114.34+99.1992j), end=(119.121+99.1992j)),
 CubicBezier(start=(119.121+99.1992j), control1=(123.898+99.1992j), control2=(127.773+95.3281j), end=(127.773+90.5469j)))
 
 q1 = path[0]
 q2 = path[1]
 q3 = path[2]
 q4 = path[3]
 

.real X निर्देशांक है
.imag Y निर्देशांक है

आपके द्वारा उपयोग किए जा रहे ड्राइंग प्रोग्राम में सटीकता में बहुत मामूली त्रुटि है और यह तब तक कोई समस्या नहीं है जब तक आप अत्यधिक सटीकता नहीं चाहते।

(q1.start.real - q3.start.real) / 2 # 8.6539 इस मामले में त्रिज्या है।
(q4.start.imag - q2.start.imag)/2 # 8.6543 त्रिज्या भी है।

(q1.start.real - q1.end.real) # 8.6539 फिर से त्रिज्या भी है।
यह एक ही संपत्ति तक पहुंचता है, path की q1 और मैं इसे उपरोक्त दो तरीकों से पसंद करता हूं क्योंकि यह एक संपत्ति तक पहुंच रहा है दो नहीं।

नीचे आरेख में हरे वृत्त द्वारा दिखाया गया है
c_x = (q1.start.real + q1.end.real) / 2 # 123.447 x के बीच में नहीं है
c_y = (q1.start.imag + q1.end.imag) / 2 # 86.21875 केंद्र में नहीं है

नीचे चित्र में लाल घेरे द्वारा दिखाया गया है
c_x = q1.end.imag # 119.121 यह केंद्र x है
c_y = q1.start.real # 90.5469 यह केंद्र y है

सटीकता में त्रुटि कितनी गंभीर है, यह समझाने के लिए, गुलाबी वृत्त 8.6543 त्रिज्या का उपयोग करता है, इसके नीचे हरे रंग में 8.6539 है, शायद अत्यधिक ज़ूम के साथ देखा जा सकता है। लेकिन यह बताता है कि दशमलव अंक कितने महत्वपूर्ण हो सकते हैं या नहीं।

१०० से कम संख्या और यथासंभव कम दशमलव बिंदुओं का उपयोग करने पर विचार करें, विशेष रूप से एक नए विचार को समझना। छोटी टेक्स्ट-लंबाई संख्याएं पठनीयता में काफी सुधार करती हैं, समझ में कोई अंत नहीं है।
मैं अक्सर दस से नीचे की संख्याओं का उपयोग करता हूँ।
नोट: आप वृत्त को वामावर्त खींच रहे हैं। दक्षिणावर्त सामान्य तरीका है।

showing a circle made from four cubic beziers

0
Owain Evans 2 सितंबर 2020, 15:08