![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
首記の件、教えて頂きたく。
canvasで描画を作成しています。
これを題名の通り花びらの角度を変えて複製する方法がありましたら教えて頂きたくお願い致します。
イメージとして添付画像の様にしたいです。
下記ソースコードは花びらの上の部分を描画したものです。
//init
const canvas = document.getElementById('test');
const context = canvas.getContext('2d');
const WIDTH = $('#test').get(0).width = $(window).width();
const HEIGHT =$('#test').get(0).height = $(window).height();
// 右側の線
context.beginPath();
context.moveTo(270,50);
context.quadraticCurveTo(300, 50, 260, 150);
//下側の円弧
context.moveTo(260,150);
context.quadraticCurveTo(240, 165, 230, 150);
//左側の円弧
context.quadraticCurveTo(210, 50, 230, 50);
//上側の線
context.moveTo(230,50);
context.lineTo(250,80);
context.lineTo(270,50);
//線全体のの色と太さ
context.lineWidth = 8;
context.strokeStyle = 'rgb(255,204,255)';
![「描画をコピーする方法」の質問画像](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/0/542884612_5febc593051e0/M.png)
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
No1です。
添付の画像は直線と円弧だけで描いているのかもしれませんが、ベジェを利用したほうが調節がしやすいので、そちらの例を作ってみました。
不連続点を作ると交点の処理が面倒なので、花弁1枚を連続パスで描いています。
ですので、繰り返しは、角度を変えて5回のみとなっています。
※ 制御点をずらすことで、花弁を太らせたり痩せさせたり、あるいはハート型のようにと変えることも可能です。
<!DOCTYPE HTML>
<html lang="ja">
<head><title>Sample</title></head>
<body>
<canvas width="400" height="400" id="test"></canvas>
<script>
const
canvas = document.getElementById('test'),
ctx = canvas.getContext('2d'),
sin = Math.sin(Math.PI * 2/5),
cos = Math.cos(Math.PI * 2/5);
//花弁ひとつ分のパス
let p = new Path2D();
p.moveTo(-10, 130);
p.lineTo(0, 110);
p.lineTo(10, 130);
p.bezierCurveTo(45, 95, 25, 20, 0, 20);
p.bezierCurveTo(-25, 20, -45, 95, -10, 130);
p.closePath();
ctx.lineWidth = 8;
ctx.strokeStyle = 'rgb(255, 180, 210)';
ctx.save();
ctx.transform(-1, 0, 0, -1, 250, 180);
for(let i=0; i<5; i++){
ctx.stroke(p);
ctx.transform(cos, sin, -sin, cos, 0, 0);
}
ctx.restore();
</script>
</body>
</html>
No.1
- 回答日時:
こんにちは
添付図のような対照的な図を描きたいのか、ご提示のスクリプトように下手ウマ的な図にしたいのかわかりませんが、添付図のようなものであると仮定して・・・
中心点に座標の中心を移動したうえで、
①花弁の半分を描画
②x軸を逆転して(線対象で)、再度①を描く
(花弁ひとつが完成)
③座標軸を1/5回転(72°)して、①②を計5回繰り返す
で、できると思われます。
実際に図を描いているのは①だけで、座標軸を移動しながら、これを全部で10回繰り返すことになります。
②、③は順序を逆転しても、結果は同じになります。
ついでながら、角度の違う線分を別々に描いてつなげると、ご提示のスクリプトのように口が開く可能性があります。
意図的にそうしている場合はそれでよいのですが、対象描性を利用して重ねて描くような場合は、LineCapをroundなどにしておくことで、何気につながるようになると思います。
(甘いエッジになるので、それが嫌なら連続線で描くのがよいでしょう)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 英語 文の構造をご教示ください 2 2023/01/01 18:03
- その他(プログラミング・Web制作) Pythonによる物理の斜方投射の位置座標表示について 2 2023/06/05 12:46
- その他(プログラミング・Web制作) Pythonにおける物理のシミュレーションでの単位変換について 2 2023/06/02 17:11
- WordPress(ワードプレス) ワードプレスのエラー ログイン画面が表示できない 1 2022/11/05 09:51
- JavaScript vertical sliderをautoplayしたい 2 2022/08/25 14:47
- その他(プログラミング・Web制作) 物理の斜方投射の目盛り線とx軸、y軸の追加について 3 2023/05/26 21:11
- その他(プログラミング・Web制作) 物理の斜方投射で目盛りに数値を入れたい 2 2023/05/27 06:32
- その他(プログラミング・Web制作) ボールの動きがスムーズに動いてかつ目盛り線描画を維持するためには 4 2023/05/31 10:01
- Excel(エクセル) 【マクロ】スクショ印刷がうまく動かない件 5 2022/12/06 17:37
- その他(プログラミング・Web制作) pythonで、tkinterとpillowの組み合わせ 2 2022/08/16 17:42
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB.NETのSendMessageを教えてく...
-
重なった要素上でのイベントで...
-
C# でパネルのマウスイベントが...
-
pngファイルを表示したい
-
SwingとEDT(イベントディスパッ...
-
GDI+で描画した画像を消去する...
-
VB.NET フォーム上に描いたグ...
-
SwingのpaintComponent(...
-
BMP画像を画像処理して連続に表...
-
描画をコピーする方法
-
PDF帳票を作成するためのフリー...
-
複数画像表示切り替え Visual c++
-
C# DataGridView のCellPaintin...
-
Labelコントロールの背景をグラ...
-
Androidのフォントサイズ(SP)と...
-
描画してもウィンドウをリサイ...
-
addcolorのオフセット値を少し...
-
「タイプ初期化子が例外をスロ...
-
変数名の付け方
-
インスタンス参照でアクセスで...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
JAVAでの背景画像表示
-
VB.NET フォーム上に描いたグ...
-
VB.NETのSendMessageを教えてく...
-
C# DataGridView のCellPaintin...
-
Javaで文字の角度を変えて表示...
-
canvasで表示されてる画像を1...
-
画面のちらつきの原因が知りた...
-
Labelコントロールの背景をグラ...
-
重なった要素上でのイベントで...
-
java.awt.peer?
-
OpenLayersの描画を固定で表示...
-
Canvas等の図形を移動する時,直...
-
ID3DXSprite::Drawメソッドに関...
-
描画処理が実行されない
-
Androidで画像の中で指定した範...
-
C#のGraphicsクラスについてです。
-
複数画像表示切り替え Visual c++
-
Androidのフォントサイズ(SP)と...
-
SwingとEDT(イベントディスパッ...
-
JavaScript でスライダーを作る...
おすすめ情報