青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

eryar

PipeCAD - Plant Piping Design Software.
PlantAssistant - Translate AVEVA RVM/SP3D VUE to glTF, STEP, etc.
posts - 606, comments - 590, trackbacks - 0, articles - 0

OpenCASCADE Trihedron Law

Posted on 2018-04-03 23:17 eryar 閱讀(2296) 評論(3)  編輯 收藏 引用 所屬分類: 2.OpenCASCADE

OpenCASCADE Trihedron Law

eryar@163.com

Abstract. In differential geometry the Frenet-Serret formulas describe the kinematic properties of a particle moving along a continuous, differentiable curve in 3d space, or the geometric properties of the curve itself irrespective of any motion. More specifically, the formulas describe the derivatives of the so-called Tangent, Normal and Binormal unit vectors in terms of each other. 

Key Words. Frenet-Serret Frame, TNB frame, Trihedron Law

1. Introduction

參數(shù)曲線上的局部坐標(biāo)系,也稱為標(biāo)架Frame,OpenCASCADE中叫Trihedron。這個局部坐標(biāo)系隨著曲線上點的運動而運動,所以也稱為活動坐標(biāo)系。活動坐標(biāo)系中各坐標(biāo)軸的選取:

l T是參數(shù)曲線的切線方向;

l N是曲線的主法線方向,或稱主法矢;主法矢總是指向曲線凹入的方向;

l B是副法矢;當(dāng)T 和N確定后,通過叉乘即得到B。

wps_clip_image-12476

Figure 1. T, N, B frame of a curve (from wiki)

定義一個活動標(biāo)架有什么作用呢?把這個問題先保留一下。本文先介紹OpenCASCADE中的標(biāo)架規(guī)則Trihedron Law。

2.Trihedron Law

在OpenCASCADE中,類GeomFill_TrihedronLaw定義了曲線活動標(biāo)架。其類圖如下所示:

wps_clip_image-18899

Figure 2. Trihedron Law define Trihedron along a Curve

從基類GeomFill_TrihedronLaw派生出了各種標(biāo)架,如:

l GeomFill_Fixed:固定的活動動標(biāo)架,即標(biāo)架沿著曲線移動時,標(biāo)架的三個方向是固定的;

l GeomFill_Frenet: Frenet標(biāo)架;

l GeomFill_Darboux :Darboux標(biāo)架;

l GeomFill_ConstantBiNormal:副法矢固定的標(biāo)架;

3. Code Demo

下面通過示例代碼來顯示出曲線上的Frenet標(biāo)架,GeomFill_TrihedronLaw子類的用法類似。

/*
Copyright(C) 2018 Shing Liu(eryar@163.com)

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files(the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/


#include <TColgp_Array1OfPnt.hxx>

#include <math_BullardGenerator.hxx>

#include <GCPnts_UniformAbscissa.hxx>
#include <GCPnts_UniformDeflection.hxx>
#include <GCPnts_TangentialDeflection.hxx>
#include <GCPnts_QuasiUniformDeflection.hxx>

#include <Geom_BSplineCurve.hxx>

#include <GeomAdaptor_HCurve.hxx>

#include <GeomAPI_PointsToBSpline.hxx>

#include <GeomFill_Fixed.hxx>
#include <GeomFill_Frenet.hxx>
#include <GeomFill_ConstantBiNormal.hxx>
#include <GeomFill_CorrectedFrenet.hxx>
#include <GeomFill_Darboux.hxx>
#include <GeomFill_DiscreteTrihedron.hxx>
#include <GeomFill_GuideTrihedronAC.hxx>
#include <GeomFill_GuideTrihedronPlan.hxx>

#include <BRepBuilderAPI_MakeEdge.hxx>

#include <BRepTools.hxx>


#pragma comment(lib, "TKernel.lib")
#pragma comment(lib, "TKMath.lib")

#pragma comment(lib, "TKG2d.lib")
#pragma comment(lib, "TKG3d.lib")
#pragma comment(lib, "TKGeomBase.lib")
#pragma comment(lib, "TKGeomAlgo.lib")

#pragma comment(lib, "TKBRep.lib")
#pragma comment(lib, "TKTopAlgo.lib")


void test()
{
    TColgp_Array1OfPnt aPoints(1, 6);
    math_BullardGenerator aBullardGenerator;
    for (Standard_Integer i = aPoints.Lower(); i <= aPoints.Upper(); ++i)
    {
        Standard_Real aX = aBullardGenerator.NextReal() * 50.0;
        Standard_Real aY = aBullardGenerator.NextReal() * 50.0;
        Standard_Real aZ = aBullardGenerator.NextReal() * 50.0;

        aPoints.SetValue(i, gp_Pnt(aX, aY, aZ));
    }

    GeomAPI_PointsToBSpline aBSplineFitter(aPoints);
    if (!aBSplineFitter.IsDone())
    {
        return;
    }

    std::ofstream aTclFile("d:/tcl/trihedron.tcl");

    aTclFile << std::fixed;
    aTclFile << "vclear" << std::endl;

    Handle(Geom_BSplineCurve) aBSplineCurve = aBSplineFitter.Curve();
    Handle(GeomAdaptor_HCurve) aCurveAdaptor = new GeomAdaptor_HCurve(aBSplineCurve);

    BRepBuilderAPI_MakeEdge anEdgeMaker(aBSplineCurve);
    BRepTools::Write(anEdgeMaker, "d:/edge.brep");

    aTclFile << "restore " <<  " d:/edge.brep e" << std::endl;
    aTclFile << "incmesh e " << " 0.01" << std::endl;
    aTclFile << "vdisplay e " << std::endl;

    Handle(GeomFill_Frenet) aFrenet = new GeomFill_Frenet();
    aFrenet->SetCurve(aCurveAdaptor);

    GCPnts_UniformAbscissa aPointSampler(aCurveAdaptor->Curve(), 5.0);
    for (Standard_Integer i = 1; i <= aPointSampler.NbPoints(); ++i)
    {
        Standard_Real aParam = aPointSampler.Parameter(i);
        gp_Pnt aP = aCurveAdaptor->Value(aParam);

        gp_Vec aT;
        gp_Vec aN;
        gp_Vec aB;

        aFrenet->D0(aParam, aT, aN, aB);

        // vtrihedron in opencascade draw 6.9.1
        /*aTclFile << "vtrihedron vt" << i << " " << aP.X() << " " << aP.Y() << " " << aP.Z() << " "
                 << " " << aB.X() << " " << aB.Y() << " " << aB.Z() << " "
                 << " " << aT.X() << " " << aT.Y() << " " << aT.Z() << std::endl;
*/

        // vtrihedron in opencascade draw 7.1.0 has bug.
        /*aTclFile << "vtrihedron vt" << i << " -origin " << aP.X() << " " << aP.Y() << " " << aP.Z() << " "
            << " -zaxis " << aB.X() << " " << aB.Y() << " " << aB.Z() << " "
            << " -xaxis " << aT.X() << " " << aT.Y() << " " << aT.Z() << std::endl;
*/

        // vtrihedron in opencascade draw 7.2.0
        aTclFile << "vtrihedron vt" << i << " -origin " << aP.X() << " " << aP.Y() << " " << aP.Z() << " "
            << " -zaxis " << aB.X() << " " << aB.Y() << " " << aB.Z() << " "
            << " -xaxis " << aT.X() << " " << aT.Y() << " " << aT.Z() << std::endl;
        aTclFile << "vtrihedron vt" << i << " -labels xaxis T 1" << std::endl;
        aTclFile << "vtrihedron vt" << i << " -labels yaxis N 1" << std::endl;
        aTclFile << "vtrihedron vt" << i << " -labels zaxis B 1" << std::endl;

        aTclFile << "vsize vt" << i << " 2" << std::endl;
    }
}

int main(int argc, char* argv[])
{
    test();

    return 0;
}

程序通過擬合幾個隨機產(chǎn)生的點生成B樣條曲線,再將曲線按弧長等距采樣,將得到的參數(shù)計算出曲線上的點,及Frenet標(biāo)架。再生成Draw腳本文件,最后將生成的Draw腳本文件trihedron.tcl加載到Draw Test Harness中顯示結(jié)果如下圖所示:

wps_clip_image-22393

Figure 3. Frenet Frame

由上圖可知,局部坐標(biāo)系的T方向為曲線的切線方向。主法向N總是指向曲線凹側(cè)。

4. Conclusion

曲線的活動標(biāo)架是《微分幾何》中一個很基礎(chǔ)的概念。有了曲線的活動標(biāo)架,掃掠造型Sweep算法的實現(xiàn)有了一些思路。當(dāng)給定一個輪廓線后,將輪廓線沿著路徑曲線掃掠可以理解為將輪廓線變換到曲線的活動標(biāo)架中。

本文主要演示了Frenet活動標(biāo)架的例子,讀者可以將GeomFill_TrihedronLaw其他的子類表示的其他類型活動標(biāo)架自己實現(xiàn),加深理解。

5. References

1. 趙罡, 穆國旺, 王拉柱. 非均勻有理B樣條. 清華大學(xué)出版社. 2010

2. 陳維桓. 微分幾何. 北京大學(xué)出版社. 2006

3. 朱心雄. 自由曲線曲面造型技術(shù). 科學(xué)出版社.  2000


為了方便大家在移動端也能看到我的博文和討論交流,現(xiàn)已注冊微信公眾號,歡迎大家掃描下方二維碼關(guān)注。
Shing Liu(eryar@163.com)

 

Feedback

# re: OpenCASCADE Trihedron Law  回復(fù)  更多評論   

2018-06-08 16:21 by birds
博主您好
又有問題請教了,我如何用vs+qt來顯示如上圖DRAW所示的各個點的坐標(biāo)方向?謝謝

# re: OpenCASCADE Trihedron Law  回復(fù)  更多評論   

2018-06-09 09:00 by eryar
@birds
你好!

如果理解了活動標(biāo)架的概念,就沒有問題了。

# re: OpenCASCADE Trihedron Law  回復(fù)  更多評論   

2018-06-09 14:34 by birds
謝謝
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国模吧视频一区| 久久一二三四| 欧美成人伊人久久综合网| 亚洲欧美日本在线| 欧美a级在线| 美国成人直播| 国产性天天综合网| 亚洲网站在线播放| 一本色道久久综合亚洲精品不卡| 久热综合在线亚洲精品| 免费不卡中文字幕视频| 一区福利视频| 欧美在线视频一区二区三区| 欧美一区三区二区在线观看| 欧美午夜精品理论片a级大开眼界| 亚洲精品护士| 一区二区三区www| 欧美日韩国产成人在线| 亚洲麻豆国产自偷在线| 99在线|亚洲一区二区| 欧美日韩1区| 99视频一区二区| 亚洲欧美日韩国产| 国产精品日韩一区二区三区| 亚洲欧美日产图| 久久久综合免费视频| 国产自产2019最新不卡| 久久久伊人欧美| 亚洲大片一区二区三区| 99精品视频免费观看| 欧美日韩另类国产亚洲欧美一级| 亚洲精品在线电影| 亚洲欧美一区二区三区在线| 国产欧美综合在线| 久久久久成人网| 亚洲国产精品久久精品怡红院 | 亚洲精品日产精品乱码不卡| 欧美国产精品v| 99这里只有久久精品视频| 午夜老司机精品| 国产一区999| 欧美xx69| 亚洲午夜激情网站| 久久五月天婷婷| 亚洲美女视频在线观看| 国产精品久久久久国产精品日日| 亚洲手机视频| 欧美成黄导航| 亚洲网站在线播放| 国产亚洲一区二区在线观看| 蜜桃视频一区| 亚洲一区二区三区激情| 久久综合网hezyo| 夜夜嗨一区二区| 国产精品久久久久av免费| 欧美一区二区三区四区高清| 欧美激情 亚洲a∨综合| 中文在线资源观看视频网站免费不卡| 国产嫩草一区二区三区在线观看| 久久精品一区二区三区不卡| 亚洲免费av观看| 久久综合色播五月| 亚洲一区在线免费| 黄色亚洲精品| 国产精品久久久久久久第一福利| 久久久久久久高潮| 亚洲一级高清| 亚洲高清视频一区二区| 欧美在线地址| 一区二区三区四区国产精品| 激情成人亚洲| 国产欧美日韩一区二区三区| 欧美国产亚洲另类动漫| 久久福利影视| 亚洲一区中文| 欧美日韩成人在线播放| 午夜伦理片一区| 亚洲经典一区| 国产一区久久| 国产精品欧美风情| 欧美激情小视频| 久久一区免费| 久久精品国产999大香线蕉| 一本高清dvd不卡在线观看| 欧美激情黄色片| 久久综合九九| 久久久久久久久久码影片| 亚洲综合首页| 一区二区三区日韩欧美| 亚洲精选一区二区| 亚洲人成高清| 亚洲人精品午夜| 亚洲国产精品久久久久秋霞影院| 国产区亚洲区欧美区| 国产精品日韩欧美一区二区| 欧美性猛交视频| 欧美三级中文字幕在线观看| 欧美日本高清视频| 欧美了一区在线观看| 欧美激情 亚洲a∨综合| 亚洲国产成人午夜在线一区| 午夜伦理片一区| 亚洲最新色图| 亚洲久久在线| 9色porny自拍视频一区二区| 亚洲精品免费在线播放| 欧美福利电影在线观看| 欧美福利在线观看| 亚洲国产精品国自产拍av秋霞 | 欧美激情一级片一区二区| 久久蜜臀精品av| 噜噜噜久久亚洲精品国产品小说| 久久男人资源视频| 欧美91大片| 亚洲国产欧美一区二区三区久久 | 欧美另类极品videosbest最新版本 | 91久久综合亚洲鲁鲁五月天| 欧美护士18xxxxhd| 亚洲国产日韩欧美在线图片| 亚洲精品久久久久久久久| 日韩视频中午一区| 亚洲午夜视频在线观看| 新67194成人永久网站| 久久久久国产精品人| 欧美91大片| 欧美视频免费看| 国产亚洲二区| 亚洲欧洲精品一区二区三区| 一本色道久久88综合日韩精品| 亚洲欧美日韩国产另类专区| 久久黄金**| 亚洲国产精品va在线观看黑人| 一本到12不卡视频在线dvd| 午夜精品在线| 欧美成人午夜激情视频| 国产精品乱子乱xxxx| 禁断一区二区三区在线| 一区二区三区精品视频| 久久精品国产免费看久久精品| 欧美国产日韩a欧美在线观看| 在线一区欧美| 欧美1区2区视频| 国产精品亚洲а∨天堂免在线| 亚洲丰满在线| 午夜视频在线观看一区| 欧美国产日韩精品| 亚洲在线中文字幕| 欧美不卡视频| 国产午夜精品久久| 一区二区三区色| 裸体歌舞表演一区二区| 亚洲深夜福利在线| 免费亚洲网站| 国产亚洲精品v| 亚洲一二三四区| 欧美大片网址| 欧美在线国产| 国产精品视频xxxx| 亚洲免费高清| 欧美v国产在线一区二区三区| 亚洲综合成人在线| 欧美日韩国产一区精品一区 | 亚洲欧美日韩视频二区| 欧美成人免费在线观看| 亚洲欧美日韩视频二区| 欧美日韩国产bt| 亚洲激情av| 欧美aaa级| 久久久久网站| 国产综合在线看| 欧美一区二区视频在线观看2020| 亚洲精品乱码久久久久久蜜桃麻豆 | 欧美在线网站| 国产精品亚洲网站| 亚洲天堂第二页| 亚洲人www| 欧美激情视频在线免费观看 欧美视频免费一 | 欧美日韩第一页| 日韩视频在线免费观看| 亚洲第一页中文字幕| 久久免费高清| 影音先锋亚洲电影| 久久综合久久综合这里只有精品| 欧美一级久久久久久久大片| 国产精品有限公司| 久久精品理论片| 香蕉av福利精品导航| 国产亚洲制服色| 久久免费视频在线| 久久深夜福利| 亚洲国产高清一区| 欧美激情在线有限公司| 欧美a级一区二区| 99精品久久| 一区二区三区视频在线播放| 国产精品久久久久9999高清| 性做久久久久久免费观看欧美| 亚洲欧美久久久久一区二区三区| 国产日韩精品综合网站| 久久亚洲色图|