###実現したいこと
svgで双曲線を書きたいです。しかし、双曲線はそもそも関数ではないので無理かなと思い始めています。わらにすがるような思いで質問します。
##やってみたこと
放物線は2次関数なのでベジェ曲線で定義可能です。両端の接線を導関数で導き、その交点を制御点として設定すれば、簡単に作成可能です。
しかし双曲線となると円の方程式に近いようなもので関数ではないので、今までのやり方だとどうしても放物線のような曲線になってしまいます。
今までのやりかたで作ったsvgがこちらです。webで表示してみてください。
svg
1<svg height="200" viewBox="0 0 100 100" width="200" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> 2 <marker viewBox="-10 -5 10 10" markerWidth="5" markerHeight="5" id="mk" refX="0" refY="0" orient="auto"> 3 <polyline points="-10,3 0,0 -10,-3" stroke="gray" fill="none" stroke-width="2"></polyline> 4 </marker> 5 <line x1="2" y1="50" x2="98" y2="50" stroke="gray" marker-end="url(#mk)"></line><!--x軸--> 6 <line x1="50" y1="98" x2="50" y2="2" stroke="gray" marker-end="url(#mk)"></line><!--y軸--> 7 <line x1="5" y1="15" x2="95" y2="85" stroke="gray"></line><!--漸近線--> 8 <line x1="5" y1="85" x2="95" y2="15" stroke="gray"></line><!--漸近線--> 9 <path d="M 95,22 Q 66,50 95,78" stroke="steelblue" fill="none"></path> 10 <path d="M 5,22 Q 34,50 5,78" stroke="steelblue" fill="none"></path> 11 <circle cx="84" cy="50" r="2" fill="gray"></circle> 12 <circle cx="16" cy="50" r="2" fill="gray"></circle> 13 <polygon points="77,29 77,71 23,71 23,29" stroke="gray" fill="none" stroke-dasharray="4 1"></polygon> 14 <text font-size="10" x="93" y="58" fill="gray" font-style="italic">x</text> 15 <text font-size="10" x="43" y="8" fill="gray" font-style="italic">y</text> 16 <text font-size="10" x="42" y="61" fill="gray">O</text> 17 </svg>
四角い枠に接するはずなのですが、やはり関数ではないので接しません。
ちなみに制御点を変更して、接するようにしたのがこちらです。
svg
1<svg height="200" viewBox="0 0 100 100" width="200" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> 2 <marker viewBox="-10 -5 10 10" markerWidth="5" markerHeight="5" id="mk" refX="0" refY="0" orient="auto"> 3 <polyline points="-10,3 0,0 -10,-3" stroke="gray" fill="none" stroke-width="2"></polyline> 4 </marker> 5 <line x1="2" y1="50" x2="98" y2="50" stroke="gray" marker-end="url(#mk)"></line><!--x軸--> 6 <line x1="50" y1="98" x2="50" y2="2" stroke="gray" marker-end="url(#mk)"></line><!--y軸--> 7 <line x1="5" y1="15" x2="95" y2="85" stroke="gray"></line><!--漸近線--> 8 <line x1="5" y1="85" x2="95" y2="15" stroke="gray"></line><!--漸近線--> 9 <path d="M 95,22 Q 59,50 95,78" stroke="steelblue" fill="none"></path> 10 <path d="M 5,22 Q 41,50 5,78" stroke="steelblue" fill="none"></path> 11 <circle cx="84" cy="50" r="2" fill="gray"></circle> 12 <circle cx="16" cy="50" r="2" fill="gray"></circle> 13 <polygon points="77,29 77,71 23,71 23,29" stroke="gray" fill="none" stroke-dasharray="4 1"></polygon> 14 <text font-size="10" x="93" y="58" fill="gray" font-style="italic">x</text> 15 <text font-size="10" x="43" y="8" fill="gray" font-style="italic">y</text> 16 <text font-size="10" x="42" y="61" fill="gray">O</text> 17 </svg>
厳密な曲線じゃないけど、方法がなかったらこっちでいいかなと思っています。
もし方法があれば教えてください。できればSVGで解決したいと思っています。
しかし、JSでもできるのであれば、それも教えていただけると助かります。
サインカーブもできれば実現したいです。
回答1件
あなたの回答
tips
プレビュー