मैं CoreGraphics उपयोग कर रहा हूँ एक द्विघात बेज़ियर आकर्षित लेकिन कंप्यूटर करने के लिए वक्र के न्यूनतम/अधिकतम मूल्य चाहते हैं के साथ द्विघात बेज़ियर की अधिकतम। मैं गणितीय पृष्ठभूमि से नहीं हूं इसलिए यह थोड़ा परेशान हो गया है। क्या किसी के पास यह हल करने के बारे में कोई लेख या विचार है?ढूँढना मिनट/CoreGraphics
उत्तर
एक द्विघात बेज़ियर के लिए, यह वास्तव में बहुत सरल है।
अपने तीन नियंत्रण बिंदुओं को P0 = (x0,y0)
, P1 = (x1,y1)
और P2 = (x2,y2)
के रूप में परिभाषित करें। x
में एक्सट्रीमा ढूंढने के लिए, इस समीकरण को हल:
t = (x0 - x1)/(x0 - 2*x1 + x2)
हैं 0 <= t <= 1
, तो t
पर अपने वक्र का मूल्यांकन करें और Px
के रूप में स्थान की दुकान। y
के लिए एक ही बात करते हैं:
t = (y0 - y1)/(y0 - 2*y1 + y2)
फिर, अगर 0 <= t <= 1
, t
पर अपने वक्र का मूल्यांकन करें और Py
के रूप में स्थान की दुकान। अंत में, अक्ष गठबंधन सीमांकन P0
, P2
, Px
(यदि पाया जाता है) और Py
युक्त (यदि पाया जाता है) बॉक्स ढूंढें। यह बाध्यकारी बॉक्स भी आपके 2 डी वर्गिक बेजियर वक्र को कसकर बाध्य करेगा।
पथरी निरंतर, जो विभेदक घटता की न्यूनतम/अधिकतम खोजने के लिए चाल के मानक बॉक्स देता है।
यहां नमूने चर्चा है:
http://newsgroups.derkeiler.com/Archive/Comp/comp.graphics.algorithms/2005-07/msg00334.html
मैं जावास्क्रिप्ट में इस का प्रतिनिधित्व बना दिया है:
function P(x,y){this.x = x;this.y = y; }
function pointOnCurve(P1,P2,P3,t){
if(t<=0 || 1<=t || isNaN(t))return false;
var c1 = new P(P1.x+(P2.x-P1.x)*t,P1.y+(P2.y-P1.y)*t);
var c2 = new P(P2.x+(P3.x-P2.x)*t,P2.y+(P3.y-P2.y)*t);
return new P(c1.x+(c2.x-c1.x)*t,c1.y+(c2.y-c1.y)*t);
}
function getQCurveBounds(ax, ay, bx, by, cx, cy){
var P1 = new P(ax,ay);
var P2 = new P(bx,by);
var P3 = new P(cx,cy);
var tx = (P1.x - P2.x)/(P1.x - 2*P2.x + P3.x);
var ty = (P1.y - P2.y)/(P1.y - 2*P2.y + P3.y);
var Ex = pointOnCurve(P1,P2,P3,tx);
var xMin = Ex?Math.min(P1.x,P3.x,Ex.x):Math.min(P1.x,P3.x);
var xMax = Ex?Math.max(P1.x,P3.x,Ex.x):Math.max(P1.x,P3.x);
var Ey = pointOnCurve(P1,P2,P3,ty);
var yMin = Ey?Math.min(P1.y,P3.y,Ey.y):Math.min(P1.y,P3.y);
var yMax = Ey?Math.max(P1.y,P3.y,Ey.y):Math.max(P1.y,P3.y);
return {x:xMin, y:yMin, width:xMax-xMin, height:yMax-yMin};
}
- 1. ढूँढना एल्विस:
- 2. ढूँढना Redis
- 3. ढूँढना जानकारी
- 4. ढूँढना $ jQuery
- 5. ढूँढना अपवाद
- 6. ढूँढना सूचकांक
- 7. ढूँढना एकाधिक तत्वों
- 8. अद्वितीय क्रमपरिवर्तन ढूँढना कुशलतापूर्वक
- 9. ढूँढना एक द्विआधारी ढेर
- 10. ढूँढना अधिभावी तरीकों
- 11. ढूँढना निकटतम आरजीबी रंग
- 12. ढूँढना एक्सटेंशन (पीएचपी)
- 13. PHP निर्भरता ढूँढना
- 14. ढूँढना पुस्तकालय विंडोज
- 15. एक एलडीएपी यूआरएल ढूँढना?
- 16. जीपीएस सिग्नल शक्ति ढूँढना
- 17. पथ ढूँढना: डी * एल्गोरिदम
- 18. ढूँढना डीएल फंक्शन पैरामीटर्स
- 19. ढूँढना एक सरणी
- 20. kth-shortest पथ ढूँढना?
- 21. OpenCV में Contours ढूँढना?
- 22. ढूँढना डुप्लिकेट मानों ArrayList
- 23. ढूँढना और उन्हें
- 24. स्थापित जेडीबीसी ड्राइवर्स ढूँढना
- 25. ढूँढना ALSA ध्वनि तेज
- 26. एंड्रॉइड स्रोत कोड ढूँढना
- 27. ढूँढना प्रक्रिया आई/ओ
- 28. ढूँढना और छानने तत्वों
- 29. Log4J लॉग फ़ाइल ढूँढना
- 30. उपयोगकर्ता आईपी पता ढूँढना
'पी 1 = (x2, y2)' में शुरुआत गलत वर्तनी, सही है? – kangax
धन्यवाद कंगैक्स। टाइपो फिक्स्ड। – Naaff