Bezier曲線(直線)をなるべく正確な単位距離で分割したいので、
方法がありましたらご教示お願いします。
まず例として自分の試した方法です
Bezier曲線(または直線)をmeasureノードで長さを計ります。アトリビュートperimeterは650です
この650を200ごとに分割これを繰り返し最後は50余らせるという想定です。
最初の曲線を切り出すのにcarveノードを使用しましたが、carveノードは単位距離は使えない(割合でカットする)ため、
firstUは0、secondUは200/650で0.3….という値を入れましたが分割された曲線には当然ながら誤差が生まれます。
数回程度であれば誤差が与える影響は少ないのですが、多くなるほど大きくなるので困ってしまいました。
曲線(直線)を単位距離で分割する方法
7053 7 0- mikuriya1
- Member
- 7 posts
- Joined: 3月 2020
- Offline
- Enivob
- Member
- 2625 posts
- Joined: 6月 2008
- Offline
- mikuriya1
- Member
- 7 posts
- Joined: 3月 2020
- Offline
- Enivob
- Member
- 2625 posts
- Joined: 6月 2008
- Offline
- Satoru
- Member
- 11 posts
- Joined: 2月 2015
- Offline
primuvconvert 関数を使って単位距離を変換できるので、それを Carve SOP で使うのはどうでしょう。
run over primitive :
run over primitive :
float curvelength; // typeid : 1 Poly, 2 NURBCurve, 3 BezierCurve int typeid = primintrinsic(0, "typeid", @primnum); if(typeid == 1) curvelength = primintrinsic(0, "measuredperimeter", @primnum); else if(typeid == 2 || typeid == 3) curvelength = primintrinsic(0, "arclength", @primnum); float unitlen = clamp(chf("len") / curvelength, 0, 1); f@domainu = primuvconvert(@OpInput1, set(unitlen, 0), @primnum, PRIMUV_UNITLEN_TO_UNIT)[0];
Image Not Found
Edited by Satoru - 2020年8月12日 00:23:21
- mikuriya1
- Member
- 7 posts
- Joined: 3月 2020
- Offline
ご返答ありがとうございます。
>Enivobさん
いえ、分割まではベジェ以外に変換する想定ではないです。
>Satoruさん
結果として、ベジェの自体の仕様?精度が不安定で不明なため、
正確な位置でカットするのが難しいのかもしれません。諦めようと思っています。
頂いたhiplcを検証しましたので報告します。
頂いたvex(Aとします)こちらで以下の部分のみ改変したVEX(Bとします)
vexf@domainu = clamp(chf(“len”) / curvelength, 0, 1);
1回目と2回目にそれぞれ長さとカーブの異なるベジェを使用しました。
1回目はhiplc内のフリーハンドで描かれてるベジエを使用しました。カットするlengthは1を指定、結果Aのが精度がよく若干誤差がございました。
2回目はこちらで用意したline(Bezier長さは121)カットするlengthは20を指定、結果Bのが精度がよく誤差はありませんでした。
この結果から丸め誤差みたいな要因でベジェの長さ自体が曖昧になってしまうのかもしれません。
画像左がAのattribwrangle右がBでございます。
>Enivobさん
いえ、分割まではベジェ以外に変換する想定ではないです。
>Satoruさん
結果として、ベジェの自体の仕様?精度が不安定で不明なため、
正確な位置でカットするのが難しいのかもしれません。諦めようと思っています。
頂いたhiplcを検証しましたので報告します。
頂いたvex(Aとします)こちらで以下の部分のみ改変したVEX(Bとします)
vexf@domainu = clamp(chf(“len”) / curvelength, 0, 1);
1回目と2回目にそれぞれ長さとカーブの異なるベジェを使用しました。
1回目はhiplc内のフリーハンドで描かれてるベジエを使用しました。カットするlengthは1を指定、結果Aのが精度がよく若干誤差がございました。
2回目はこちらで用意したline(Bezier長さは121)カットするlengthは20を指定、結果Bのが精度がよく誤差はありませんでした。
この結果から丸め誤差みたいな要因でベジェの長さ自体が曖昧になってしまうのかもしれません。
画像左がAのattribwrangle右がBでございます。
Edited by mikuriya1 - 2020年8月13日 04:03:54
- Satoru
- Member
- 11 posts
- Joined: 2月 2015
- Offline
- mikuriya1
- Member
- 7 posts
- Joined: 3月 2020
- Offline
-
- Quick Links