एसवीजी गोल कोना


86

मेरे पास निम्न SVG है:

<svg>
  <g>
    <path id="k9ffd8001" d="M64.5 45.5 82.5 45.5 82.5 64.5 64.5 64.5 z" stroke="#808600" stroke-width="0" transform="rotate(0 0 0)" stroke-linecap="square" stroke-linejoin="round" fill-opacity="1" stroke-opacity="1" fill="#a0a700"></path>
    <path id="kb8000001" d="M64.5 45.5 82.5 45.5 82.5 64.5 64.5 64.5 z" stroke="#808600" stroke-width="0" transform="rotate(0 0 0)" stroke-linecap="square" stroke-linejoin="round" fill-opacity="1" stroke-opacity="1" fill="url(#k9ffb0001)"></path>
  </g>
</svg>

मैं सीएसएस जैसा border-top-right-radiusऔर border-top-bottom-radiusप्रभाव पाना चाहता हूं ।

मैं उस गोल कोने के प्रभाव को कैसे प्राप्त कर सकता हूं?


1
यह बहुत बुरा है कि CSS ' border-radiusऔर इसके वेरिएंट SVG में काम नहीं करते हैं।
स्टीवन वचोन

9
Btw। यदि आपके पास एक आयत है, तो आप कोनों को जोड़ सकते हैं rx=3या ry=3गोल कर सकते हैं । developer.mozilla.org/en-US/docs/Web/SVG/Attribute/rx
लुकास लाइसीस

जवाबों:


131

यहां बताया गया है कि आप SVG पाथ के साथ एक गोल आयत कैसे बना सकते हैं:

<path d="M100,100 h200 a20,20 0 0 1 20,20 v200 a20,20 0 0 1 -20,20 h-200 a20,20 0 0 1 -20,-20 v-200 a20,20 0 0 1 20,-20 z" />

व्याख्या

m100,100: पॉइंट टू मूव (100,100)

h200: हम जहां हैं, वहां से एक 200px क्षैतिज रेखा खींचते हैं

a20,20 0 0 1 20,20: X और Y अक्ष में 20px अंतर के साथ 20px X त्रिज्या, 20px Y त्रिज्या, दक्षिणावर्त के साथ एक चाप खींचना

v200: जहां हम हैं वहां से एक 200px ऊर्ध्वाधर रेखा खींचना

a20,20 0 0 1 -20,20: X और Y अक्ष में 20px अंतर के साथ 20px X और Y त्रिज्या, दक्षिणावर्त के साथ एक बिंदु पर एक चाप खींचें।

h-200: जहां हम हैं वहां से एक -200px क्षैतिज रेखा खींचना

a20,20 0 0 1 -20, -20: X और Y अक्ष में -20px अंतर के साथ 20px X और Y त्रिज्या, दक्षिणावर्त के साथ एक बिंदु पर एक चाप खींचें।

v-200: हम जहां हैं वहां से एक -200px ऊर्ध्वाधर रेखा खींचते हैं

a20,20 0 0 1 20, -20: X और Y अक्ष में 20px अंतर के साथ 20px X और Y त्रिज्या, दक्षिणावर्त के साथ एक बिंदु पर एक चाप खींचें और Y अक्ष में -20px अंतर

z: रास्ता बंद करो

<svg width="440" height="440">
  <path d="M100,100 h200 a20,20 0 0 1 20,20 v200 a20,20 0 0 1 -20,20 h-200 a20,20 0 0 1 -20,-20 v-200 a20,20 0 0 1 20,-20 z" fill="none" stroke="black" stroke-width="3" />
</svg>


3
चाप के बारे में अधिक जानकारी के इच्छुक लोगों के लिए, यह API है: A rx ry x-axis-rotation large-arc-flag sweep-flag x y( developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths )
निक स्कोजारो

यदि आप केवल एक गोल आयत चाहते हैं और अधिक जटिल आकार नहीं है (जो कि गोलगप्पे बनाते समय मैंने इसे पाया है), और सरल दृष्टिकोण <svg viewBox="0 0 110 110" xmlns="http://www.w3.org/2000/svg"> `<rect x =" 5 "y =" 5 "चौड़ाई =" 100 "ऊंचाई का उपयोग कर सकता है = "100" आरएक्स = "15" शैली = "स्ट्रोक: # 000000; भरण: # एफएफएफएफएफ" /> `</svg>
जॉन सॉबल

58

निश्चित नहीं कि किसी ने वास्तविक एसवीजी उत्तर क्यों नहीं पोस्ट किया। यहाँ शीर्ष पर गोल कोनों (त्रिज्या 3) के साथ एक एसवीजी आयत है:

<svg:path d="M0,0 L0,27 A3,3 0 0,0 3,30 L7,30 A3,3 0 0,0 10,27 L10,0 Z" />

यह एक मूव टू (एम), लाइन टू (एल), आर्क टू (ए), लाइन टू (एल), आर्क टू (ए), लाइन टू (एल), क्लोज पाथ (जेड) है।

अल्पविराम-सीमांकित संख्याएँ पूर्ण निर्देशांक हैं। चाप को त्रिज्या और चाप के प्रकार को निर्दिष्ट करने वाले अतिरिक्त मापदंडों के साथ परिभाषित किया गया है। यह भी सापेक्ष निर्देशांक के साथ पूरा किया जा सकता है (एल और ए के लिए लोअर-केस अक्षरों का उपयोग करें)।

उन आदेशों का पूरा संदर्भ W3C SVG पथ पृष्ठ पर है, और SVG पथों पर अतिरिक्त संदर्भ सामग्री इस लेख में पाई जा सकती है ।


12
यह सीधे उस उत्तर के लिए नहीं है जिसकी मुझे तलाश थी, लेकिन अच्छा भगवान अगर यह उपयोगी नहीं है। हमेशा सोचता था कि पत्र क्या थे।
एलेक्स मैककेब

1
स्पष्टीकरण के लिए थैंक्स :)
उस्मान एर्डी

49

मेरे उत्तर के संदर्भ में पथ / बहुभुज के लिए गोल कोनों को लागू करने के रूप में , मैंने SVG पथों के उदारतापूर्वक गोल कोनों के लिए जावास्क्रिप्ट में एक दिनचर्या लिखी है, उदाहरण के लिए, यहां: http://plnkr.co/edit-kGnGGyoOCKil02k04snu

यह आपके किसी भी स्ट्रोक प्रभाव से स्वतंत्र रूप से काम करेगा। उपयोग करने के लिए, Plnkr से rounding.js फ़ाइल शामिल करें और फ़ंक्शन को इस तरह से कॉल करें:

roundPathCorners(pathString, radius, useFractionalRadius)

परिणाम गोल मार्ग होगा।

परिणाम इस तरह दिखते हैं:

एसवीजी पथ राउंडिंग उदाहरण


अच्छा है, हालांकि रिश्तेदार आज्ञाओं के लिए समर्थन भी अच्छा होगा।
जोकिम ब्रेटनर

1
मैं सहमत हूं :) यह मेरी समस्या को हल करने के लिए सिर्फ एक छोटा सा था, न कि पूरी तरह से पुस्तकालय में एक प्रयास। मैं उस कार्यक्षमता के साथ एक कांटा का स्वागत करता हूँ!
योना एप्लेट्री

क्या आपके पास इसमें इसके साथ रेपो है? इसके महान, इसे बनाने के लिए बहुत बहुत धन्यवाद।
जेव

1
मैंने कभी इसके लिए रेपो बनाने की जहमत नहीं उठाई ... हालांकि मुझे शायद ऐसा करना चाहिए।
योना एप्लेट्री

मैं रेपो के बारे में @ Djave के सवाल पर वापस जाना चाहता हूं; -]
t3chb0t

38

आप निश्चित रूप stroke-linejoinसे roundअपने stroke-widthको 0, लेकिन अपने को , निश्चित रूप से सेट कर चुके हैं आप नहीं गोलाकार कोनों को देखने के लिए आप दौर के लिए कोई स्ट्रोक है, तो जा रहे हैं।

यहाँ स्ट्रोक के माध्यम से बनाए गए गोल कोनों के साथ एक संशोधित उदाहरण दिया गया है:
http://jsfiddle.net/8uxqK/1/

<path d="M64.5 45.5 82.5 45.5 82.5 64.5 64.5 64.5 z"
      stroke-width="5"
      stroke-linejoin="round"
      stroke="#808600"
      fill="#a0a700" />

अन्यथा- यदि आपको एक वास्तविक गोल आकार भरने की आवश्यकता है और न कि केवल एक गोल फैटी स्ट्रोक - तो आपको वह करना होगा जो @ जैलेंज कहता है और एक वास्तविक गोल आकार बनाता है।


मैं इसे सही ढंग से jsfiddle पर देखता हूं, लेकिन स्थानीय HTML-दस्तावेज़ की प्रतिलिपि बनाते समय यह केवल एक सादे आयत है।
मैड्स स्केजर्न

6
आप उपयोग कर सकते हैं stroke-linecapके बजाय stroke-linejoin। इससे मेरा काम बनता है।
लोबोडार्ट

33

मैं एक सादे पुराने का उपयोग करने पर भी विचार करूंगा, <rect>जो प्रदान करता है rxऔर ryविशेषताएँ

एमडीएन एसवीजी डॉक्स <- दूसरे ड्रा किए गए आयत तत्व पर ध्यान दें


2
लेकिन ओपी चाहता है कि केवल कुछ कोनों को गोल किया जाए।
रॉबर्ट लोंगसन

9
यह मेरे प्रश्न का उत्तर देता है, जो मुझे इस पृष्ठ पर लाया है। तो धन्यवाद!
स्टीवन वचोन

1
यदि आपको तत्वों के कुछ समूह में गोल कोनों का उपयोग करने की आवश्यकता है, और न केवल एक रेक्ट में, तो आप ऐसा कर सकते हैं कि क्लिपपाथ डेवलपर. mozilla.org/pt-BR/docs/Web/SVG/Element/clipPath का उपयोग कर जैसा कि आप यहां देख सकते हैं। jsfiddle.net/thiagomata/mp28rnj6/1
थियागो माता

ओपी में मृत लिंक। :(
पॉसफ़न 12

@ posfan12 ने तय किया कि आपके लिए :)
जोशुआ

12

मैं आज स्वयं इस समस्या पर हुआ हूं और एक छोटा जावास्क्रिप्ट फ़ंक्शन लिखकर इसे हल करने में कामयाब रहा।

मैं जो बता सकता हूं, उसमें एसवीजी गोल कोनों में एक पाथ एलीमेंट देने का कोई आसान तरीका नहीं है, सिवाय इसके कि आपको केवल सीमा रेखाओं की जरूरत है, इस मामले में (सीएसएस) विशेषताएँ stroke, stroke-widthऔर सबसे महत्वपूर्ण बातstroke-linejoin="round" कि पूरी तरह से पर्याप्त हैं।

हालाँकि, मेरे मामले में मैंने n कोनों के साथ कस्टम आकार बनाने के लिए एक पथ ऑब्जेक्ट का उपयोग किया है जो एक निश्चित रंग से भरे हुए हैं और दृश्यमान सीमाएं नहीं हैं, इस तरह से:

यहां छवि विवरण दर्ज करें

मैं एक त्वरित फ़ंक्शन लिखने में कामयाब रहा जो एसवीजी पथ के लिए निर्देशांक की एक सरणी लेता है और dपथ HTML तत्व की विशेषता में डालने के लिए समाप्त पथ स्ट्रिंग देता है । परिणामी आकृति कुछ इस तरह दिखाई देगी:

यहां छवि विवरण दर्ज करें

यहाँ समारोह है:

/**
 * Creates a coordinate path for the Path SVG element with rounded corners
 * @param pathCoords - An array of coordinates in the form [{x: Number, y: Number}, ...]
 */
function createRoundedPathString(pathCoords) {
    const path = [];
    const curveRadius = 3;

    // Reset indexes, so there are no gaps
    pathCoords = pathCoords.slice();

    for (let i = 0; i < pathCoords.length; i++) {

      // 1. Get current coord and the next two (startpoint, cornerpoint, endpoint) to calculate rounded curve
      const c2Index = ((i + 1) > pathCoords.length - 1) ? (i + 1) % pathCoords.length : i + 1;
      const c3Index = ((i + 2) > pathCoords.length - 1) ? (i + 2) % pathCoords.length : i + 2;

      const c1 = pathCoords[i];
      const c2 = pathCoords[c2Index];
      const c3 = pathCoords[c3Index];

      // 2. For each 3 coords, enter two new path commands: Line to start of curve, bezier curve around corner.

      // Calculate curvePoint c1 -> c2
      const c1c2Distance = Math.sqrt(Math.pow(c1.x - c2.x, 2) + Math.pow(c1.y - c2.y, 2));
      const c1c2DistanceRatio = (c1c2Distance - curveRadius) / c1c2Distance;
      const c1c2CurvePoint = [
        ((1 - c1c2DistanceRatio) * c1.x + c1c2DistanceRatio * c2.x).toFixed(1),
        ((1 - c1c2DistanceRatio) * c1.y + c1c2DistanceRatio * c2.y).toFixed(1)
      ];

      // Calculate curvePoint c2 -> c3
      const c2c3Distance = Math.sqrt(Math.pow(c2.x - c3.x, 2) + Math.pow(c2.y - c3.y, 2));
      const c2c3DistanceRatio = curveRadius / c2c3Distance;
      const c2c3CurvePoint = [
        ((1 - c2c3DistanceRatio) * c2.x + c2c3DistanceRatio * c3.x).toFixed(1),
        ((1 - c2c3DistanceRatio) * c2.y + c2c3DistanceRatio * c3.y).toFixed(1)
      ];

      // If at last coord of polygon, also save that as starting point
      if (i === pathCoords.length - 1) {
        path.unshift('M' + c2c3CurvePoint.join(','));
      }

      // Line to start of curve (L endcoord)
      path.push('L' + c1c2CurvePoint.join(','));
      // Bezier line around curve (Q controlcoord endcoord)
      path.push('Q' + c2.x + ',' + c2.y + ',' + c2c3CurvePoint.join(','));
    }
    // Logically connect path to starting point again (shouldn't be necessary as path ends there anyway, but seems cleaner)
    path.push('Z');

    return path.join(' ');
}

आप शीर्ष पर वक्रराडियस चर सेट करके गोलाई ताकत निर्धारित कर सकते हैं । 100x100 (व्यूपोर्ट) समन्वय प्रणाली के लिए डिफ़ॉल्ट 3 है, लेकिन आपके एसवीजी के आकार के आधार पर, आपको इसे समायोजित करने की आवश्यकता हो सकती है।


1
यह गणित कमाल का है। मैं इसे समझ गया हूं और मैंने इसे एंड्रॉइड में लागू कर दिया है ताकि बहुभुज का गोल कोना हो।
आदिल सूमरो

मैंने एक छोटा और सरलीकृत संस्करण stackoverflow.com/a/65186378/4655042 बनाया जो मुझे लगता है कि अधिक सुरुचिपूर्ण है।
Janispritzkau

5

यह प्रश्न Googling "svg गोल कोनों पथ" के लिए पहला परिणाम है। उपयोग करने के लिए फ्रॉग्ज सुझाव strokeकी कुछ सीमाएँ हैं (अर्थात्, मैं अन्य उद्देश्यों के लिए स्ट्रोक का उपयोग नहीं कर सकता, और यह कि स्ट्रोक की चौड़ाई के लिए आयामों को सही करना होगा)।

वक्र का उपयोग करने के लिए जलेंगे का सुझाव बेहतर है, लेकिन बहुत ठोस नहीं है। मैंने गोल कोनों को खींचने के लिए द्विघात बेज़ियर घटता का उपयोग किया। नीले कोने और आसन्न किनारों पर दो लाल बिंदुओं के साथ चिह्नित कोने के इस चित्र पर विचार करें:

एक कोने का किनारा आसन्न किनारों पर दो बिंदुओं के साथ नीले रंग में चिह्नित है

Lकमांड के साथ दो लाइनें बनाई जा सकती थीं । इस तीखे कोने को गोल कोने में बदलने के लिए, बाएं लाल बिंदु से एक वक्र बनाना शुरू करें ( M x,yउस बिंदु पर जाने के लिए उपयोग करें)। अब द्विघात बेयरियर वक्र में केवल एक नियंत्रण बिंदु होता है जिसे आपको नीले बिंदु पर सेट करना होगा। सही लाल बिंदु पर वक्र के अंत को सेट करें। जैसा कि दो लाल बिंदुओं पर स्पर्शरेखा पिछली पंक्तियों की दिशा में है, आप एक धाराप्रवाह संक्रमण, "गोल कोनों" देखेंगे।

गोल कोने के बाद आकार को जारी रखने के लिए, बेज़ियर वक्र में एक सीधी रेखा को दो कोनों के बीच की रेखा पर नियंत्रण बिंदु सेट करके प्राप्त किया जा सकता है।

रास्ता तय करने में मेरी मदद करने के लिए, मैंने यह पायथन स्क्रिप्ट लिखी जो किनारों और एक दायरे को स्वीकार करती है। वेक्टर गणित यह वास्तव में बहुत आसान बनाता है। आउटपुट से परिणामी छवि:

स्क्रिप्ट आउटपुट से बनाई गई आकृति

#!/usr/bin/env python
# Given some vectors and a border-radius, output a SVG path with rounded
# corners.
#
# Copyright (C) Peter Wu <peter@lekensteyn.nl>

from math import sqrt

class Vector(object):
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def sub(self, vec):
        return Vector(self.x - vec.x, self.y - vec.y)

    def add(self, vec):
        return Vector(self.x + vec.x, self.y + vec.y)

    def scale(self, n):
        return Vector(self.x * n, self.y * n)

    def length(self):
        return sqrt(self.x**2 + self.y**2)

    def normal(self):
        length = self.length()
        return Vector(self.x / length, self.y / length)

    def __str__(self):
        x = round(self.x, 2)
        y = round(self.y, 2)
        return '{},{}'.format(x, y)

# A line from vec_from to vec_to
def line(vec_from, vec_to):
    half_vec = vec_from.add(vec_to.sub(vec_from).scale(.5))
    return '{} {}'.format(half_vec, vec_to)

# Adds 'n' units to vec_from pointing in direction vec_to
def vecDir(vec_from, vec_to, n):
    return vec_from.add(vec_to.sub(vec_from).normal().scale(n))

# Draws a line, but skips 'r' units from the begin and end
def lineR(vec_from, vec_to, r):
    vec = vec_to.sub(vec_from).normal().scale(r)
    return line(vec_from.add(vec), vec_to.sub(vec))

# An edge in vec_from, to vec_to with radius r
def edge(vec_from, vec_to, r):
    v = vecDir(vec_from, vec_to, r)
    return '{} {}'.format(vec_from, v)


# Hard-coded border-radius and vectors
r = 5
a = Vector(  0,  60)
b = Vector(100,   0)
c = Vector(100, 200)
d = Vector(  0, 200 - 60)

path = []
# Start below top-left edge
path.append('M {} Q'.format(a.add(Vector(0, r))))

# top-left edge...
path.append(edge(a, b, r))
path.append(lineR(a, b, r))
path.append(edge(b, c, r))
path.append(lineR(b, c, r))
path.append(edge(c, d, r))
path.append(lineR(c, d, r))
path.append(edge(d, a, r))
path.append(lineR(d, a, r))

# Show results that can be pushed into a <path d="..." />
for part in path:
    print(part)

3

यहाँ टैब के लिए कुछ रास्ते हैं:

https://codepen.io/mochime/pen/VxxzMW

<!-- left tab -->
<div>
  <svg width="60" height="60">
    <path d="M10,10 
             a10 10 0 0 1 10 -10
             h 50   
             v 47
             h -50
             a10 10 0 0 1 -10 -10
             z"
      fill="#ff3600"></path>
  </svg>
</div>

<!-- right tab -->
<div>
  <svg width="60" height="60">
    <path d="M10 0   
             h 40
             a10 10 0 0 1 10 10
             v 27
             a10 10 0 0 1 -10 10
             h -40
             z"
      fill="#ff3600"></path>
  </svg>
</div>

<!-- tab tab :) -->
<div>
  <svg width="60" height="60">
    <path d="M10,40 
             v -30
             a10 10 0 0 1 10 -10
             h 30
             a10 10 0 0 1 10 10
             v 30
             z"
      fill="#ff3600"></path>
  </svg>
</div>

अन्य उत्तरों ने यांत्रिकी को समझाया। मुझे विशेष रूप से होसेन-मैक्टोबियन का उत्तर पसंद आया।

कलम में पथ काम का खामियाजा देते हैं, मूल्यों को जो भी वांछित आयामों को सूट करने के लिए संशोधित किया जा सकता है।


1

मुझे इसका हल मिल गया लेकिन यह थोड़ा हैक है इसलिए यह हमेशा काम नहीं कर सकता है। मैंने पाया कि अगर आपके पास वास्तव में छोटे मूल्यों वाला एक आर्क (ए या ए) है, तो यह एक स्थान पर एक वक्र बनाने के लिए मजबूर करता है, इस प्रकार एक गोल हास्य बनाता है ...

<svg viewBox="0 0 1 0.6" stroke="black" fill="grey" style="stroke-width:0.05px;">
  <path d="M0.7 0.2 L0.1 0.1 A0.0001 0.0001 0 0 0 0.099 0.101 L0.5 0.5Z"></path>
</svg>


1

बस @ hmak.me के उत्तर के कार्यान्वयन को सरल बनाने के लिए, यहाँ राउंडेड आयतों को उत्पन्न करने के लिए रिएक्ट कोड का एक टिप्पणी टुकड़ा है।

const Rect = ({width, height, round, strokeWidth}) => {
    // overhang over given width and height that we get due to stroke width
    const s = strokeWidth / 2;

    // how many pixels do we need to cut from vertical and horizontal parts
    // due to rounded corners and stroke width
    const over = 2 * round + strokeWidth;

    // lengths of straight lines
    const w = width - over;
    const h = height - over;

    // beware that extra spaces will not be minified
    // they are added for clarity
    const d = `
        M${round + s},${s}
        h${w}
        a${round},${round} 0 0 1 ${round},${round}
        v${h}
        a${round},${round} 0 0 1 -${round},${round}
        h-${w}
        a${round},${round} 0 0 1 -${round},-${round}
        v-${h}
        a${round},${round} 0 0 1 ${round},-${round}
        z
    `;
    return (
        <svg width={width} height={height}>
            <path d={d} fill="none" stroke="black" strokeWidth={strokeWidth} />
        </svg>
    );
};

ReactDOM.render(
    <Rect width={64} height={32} strokeWidth={2} round={4} />,
    document.querySelector('#app'),
);

Jsfiddle लिंक।


0

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

function createRoundedPath(coords, radius, close) {
  let path = ""
  const length = coords.length + (close ? 1 : -1)
  for (let i = 0; i < length; i++) {
    const a = coords[i % coords.length]
    const b = coords[(i + 1) % coords.length]
    const t = Math.min(radius / Math.hypot(b.x - a.x, b.y - a.y), 0.5)

    if (i > 0) path += `Q${a.x},${a.y} ${a.x * (1 - t) + b.x * t},${a.y * (1 - t) + b.y * t}`

    if (!close && i == 0) path += `M${a.x},${a.y}`
    else if (i == 0) path += `M${a.x * (1 - t) + b.x * t},${a.y * (1 - t) + b.y * t}`

    if (!close && i == length - 1) path += `L${b.x},${b.y}`
    else if (i < length - 1) path += `L${a.x * t + b.x * (1 - t)},${a.y * t + b.y * (1 - t)}`
  }
  if (close) path += "Z"
  return path
}

-2
<?php
$radius = 20;
$thichness = 4;
$size = 200;

if($s == 'circle'){
  echo '<svg width="' . $size . '" height="' . $size . '">';
  echo '<circle cx="' . ($size/2) . '" cy="' . ($size/2) . '" r="' . (($size/2)-$thichness) . '" stroke="black" stroke-width="' . $thichness . '" fill="none" />';
  echo '</svg>';
}elseif($s == 'square'){
  echo '<svg width="' . $size . '" height="' . $size . '">';
  echo '<path d="M' . ($radius+$thichness) . ',' . ($thichness) . ' h' . ($size-($radius*2)-($thichness*2)) . ' a' . $radius . ',' . $radius . ' 0 0 1 ' . $radius . ',' . $radius . ' v' . ($size-($radius*2)-($thichness*2)) . ' a' . $radius . ',' . $radius . ' 0 0 1 -' . $radius . ',' . $radius . ' h-' . ($size-($radius*2)-($thichness*2)) . ' a' . $radius . ',' . $radius . ' 0 0 1 -' . $radius . ',-' . $radius . ' v-' . ($size-($radius*2)-($thichness*2)) . ' a' . $radius . ',' . $radius . ' 0 0 1 ' . $radius . ',-' . $radius . ' z" fill="none" stroke="black" stroke-width="' . $thichness . '" />';
  echo '</svg>';
}
?>

-4

आप एक पथ तत्व का उपयोग कर रहे हैं, आप केवल पथ को वक्र क्यों नहीं देते? पथ तत्वों का उपयोग करके वक्र बनाने के तरीके के लिए यहां देखें: http://www.w3.org/TR/SVG/paths.html#PathDataCurveCommands


आपके उत्तर के लिए धन्यवाद। वे वास्तव में सहायक हैं, लेकिन समस्या यह है कि मैं केंडोयू चार्ट का उपयोग करता हूं और रास्ते गतिशील रूप से बना रहे हैं। मैंने उन्हें फ्रोग्ज की पेशकश करने वाली विधि के साथ बदलने की कोशिश की, लेकिन मुझे बॉर्डर-त्रिज्या = 10 पीएक्स प्रभाव मिलता है, लेकिन मुझे सीमा-शीर्ष की आवश्यकता है बाएँ-त्रिज्या = 10px और सीमा-नीचे-बाएँ-त्रिज्या = 10px केवल। मैं एसवीजी में वास्तव में नया हूं इसलिए मेरे लिए दूसरी विधि नहीं। तो क्या आप मेरे लिए पथ समन्वयकों को लिख सकते हैं। अग्रिम धन्यवाद
Danis

जितना मैं आपके लिए यह करना पसंद करूंगा, मेरे पास गणित / समन्वय स्थान के माध्यम से जाने का समय नहीं है। यदि आप लिंक में अण्डाकार चाप कमांड का उपयोग करते हैं तो यह बहुत कठिन नहीं होना चाहिए।
RestingRobot
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.