精华内容
下载资源
问答
  • 二次曲线

    2020-06-16 11:50:55
    二次曲线/圆锥曲线:平面截取圆锥而得到曲线。包括:圆、椭圆、抛物线、双曲线,以及一些退化类型 退化类型:当平面是过圆锥顶点截取时候,会得到一对直线、一个点...1. 判断二次曲线是否退化 det B = 0 则退.

    二次曲线/圆锥曲线:平面截取圆锥而得到的曲线。包括:圆、椭圆、抛物线、双曲线,以及一些退化类型

    退化类型:当平面是过圆锥顶点截取的时候,会得到一对直线、一个点、一个直线。

    方程一般形式:

    用矩阵表示:后者叫做齐次坐标,n维空间的点用n+1维坐标描述。

    ==========================================================

    判断曲线类型:
     记这两个矩阵分别为A与B

    1. 判断二次曲线是否退化
    det B = 0 则退化,否则未退化

    2. 未退化时,判断曲线类型
    det A > 0 表示椭圆,分为实椭圆与虚椭圆,A=C 表示圆
    det A = 0 表示抛物线
    det A < 0 表示双曲线,A+C=0 表示支教双曲线

    3. 退化时,判断退化类型
    det A > 0  是椭圆的退化,退化为一个点
    det A = 0 是抛物线的退化,退化为两条平行直线。当D**2+E**2>4(A+C)F 为两条不重合的平行直线;当D**2+E**2>4(A+C)F 为两条重合的平行直线;当D**2+E**2<4(A+C)F 为两条不存在于实平面的直线。 如下图。

    det A < 0 是双曲线的退化,退化为两条相交直线

    展开全文
  • 然后到二元二次方程,虽然我们可以通过旋转方法消灭掉xy项从而判断出方程对应的曲线类型,但过程过于繁琐,表达式太长,处理起来也很不方便,如果还要进行求交而不局限于判断类型,那么用前面旋转法,演算就更加...

    在讲解砖块铺贴的时候,我们先用基础的旋转缩放等变换组合出了45度地图铺贴的变换矩阵。然后发现针对性太强,换成别的角度就很不好算了。接着改成了用基向量进行推导的方法。

    然后到二元二次方程,虽然我们可以通过旋转的方法消灭掉xy项从而判断出方程对应的曲线类型,但过程过于繁琐,表达式太长,处理起来也很不方便,如果还要进行求交而不局限于判断类型,那么用前面的旋转法,演算就更加麻烦了。

    既然在铺贴的实现中,基向量矩阵优于旋转矩阵,那么在转换二元二次方程的时候,是否也可以用基向量来简化呢?

    然而我们发现,二元二次方程中的系数,其几何意义并不明显,光判断类型就要计算B^2-4AC,至于旋转角度,偏移量这些,恐怕就更加复杂了。

    不过,二次贝塞尔曲线的方程却有特别明显的几何意义,建立起来的数据全部是直接的点坐标。

    既然如此,那我们不妨用基向量直接对二次贝塞尔曲线特有的方程进行转换,反正上篇已经证明了它的本质是抛物线。

    砖块铺贴我们用网格来构建基向量,那么贝塞尔这种曲线我们怎样来生成基向量呢?

    实际上,坐标系本身就可以看作网格,把刻度线延长即可生成。

    emmm....理工科的学生应该会似曾相识吧,实验课用到的坐标纸,嘿嘿。

    现在我们可以理直气壮地拿(0,0)到(1,1)这一个正方形来构建基向量。现在这是标准方程,基向量自然直接跟着坐标轴来,因此x方向的基向量为(1,0),y方向的基向量为(0,1)。

    为了便于跟转换后的图形对照,我们把曲线以及端点和控制点连线所经过的所有网格也填上颜色,同时用字母标记上一些关键点。

     

    A-H这8个点的坐标,现在我们一眼都能看出来,但映射到一般的贝塞尔曲线之后呢?还能直接看得出来么?反正我是看不出了。因此这里需要有一些特征性的东西来帮助我们在转换之后仍然不会迷失方向。

    O是抛物线顶点,但跟贝塞尔曲线很难匹配到这个顶点。

    A和E缺乏典型的几何特征,最多有OA和OE都跟抛物线相切,但O点都很难明确了,因此先放一放。

    B和D分别是曲线的两个端点。

    C是B和D连线的中点。

    F和H的几何特征也不明显。

    G是控制点坐标。

     

    这里直接给出一个结论:矩阵变换为仿射变换,平行线在变形前后仍为平行线,若两平行线段(同一直线上的也算)长度相等,则变换后它们的长度也依然相等。证明从略。

    由于BCD几何特征明显,所以,我们可以再加入AE平行于BD,FH平行于BD这两条线索。

    另外还有两点:

    1 OA为x方向的基向量,OC为y方向的基向量。

    2 O是CG和抛物线和交点,也是抛物线的顶点。

    下面我们尝试做个变换吧。比如下图这个样子。

     

    B,D,G直接是已知点,可以先画出来。接着C是BD连线的中点,也可以直接画得到。

    然后,CG和贝塞尔曲线的交点对应的就是O点了,也刚好对应标准抛物线的顶点。

    本来二次贝塞尔曲线和直线求交是要解二元二次方程组,但根据已有线索以及前面提到的矩阵变换的性质,O点刚好是CG的中点,因此能直接算出来是(0.75,0),已用蓝字表示。

    然后我们还知道,OA是x方向的基向量,它平行于CB并且长度跟CB相等。

    因为我们的目标是求出基向量,所以A点坐标可以不算出来,然后向量OA=向量CB。

    所以向量OA=B-C=(2,2)-(0.5,1)=(1.5, 1)

    而向量OC直接等于y方向的基向量C-O'=(0.5, 1)-(0.75, 0) = (-0.25, 1)

    PS:也可以不求O'点,直接取CG的一半

    基向量求好了,但是可能有的朋友看着会懵逼,那我现在把色块也加上,并且把变换前的图像搬出来,给大家一个直观的形象。

    跟砖块铺贴不一样,坐标原点上的抛物线顶点也跟着移动了。所以从标准方程到贝塞尔曲线方程,这里要分两步变换。

    第一步是执行基向量矩阵变换,第二步是偏移(0.75, 0)。

    在一周前(终于不是七八个月了)的连载十二中,我给出了基向量矩阵的推导过程,但这次我不用再不厌其烦地把那些让别人看着头痛的公式给搬过来再讲解一遍,因为在紧接着的连载十三中我给出了代码,然后我也不手算了,直接交由浏览器来算。

    PS:跟前面变换二元二次方程不同,这里的变换不包含任何诸如xy这样的未知数,所以完全可以让任何非数学编程的高级语言来实现。所谓非数学编程语言,简单点理解就是我想实现传入一个表达式,然后无法直接生成计算后的表达式。比如

    function sqr(n){
        return n*n;
    }
        

    我们没有直接的方法让这个函数在传入"n-2"的时候给我返回"n^2-4n+4"

    但是矩阵不存在这个问题,我们现在把代码搬过来就可以了。

    var matrix = new Matrix();
    var baseX = new Point(1.5, 1); //ex基向量
    var baseY = new Point(-0.25, 1); //ey基向量
    matrix.a = baseX.x;	
    matrix.b = baseY.x;
    matrix.c = baseX.y;
    matrix.d = baseY.y;
    MatrixUtil.translate(matrix, 0.75, 0);
    console.log(matrix.a, matrix.b, matrix.c, matrix.d, matrix.tx, matrix.ty);

    将输出如下结果(其实这么简单的,肉眼也能看得出来):

    1.5 1 -0.25 1 0.75 0

    我们先把曲线的点代入下,这条曲线的3个点分别为(-1,0),(1,-1)和(2, 2),故方程为:

    接着我们知道旋转的套路是这样写的:

    然后矩阵乘法的套路是这样写的:

    按旋转的格式来就是这样:

    于是我们代入到参数方程中,得到

    然后矩阵的6个系数,前面输出过了,我们代进去:

    然后解一下关于X,Y的二元一次方程组(怎么不用逆矩阵?因为t是未知数,不好通过代码实现,手算的话就无所谓了):

    下式-上式,得到:

    求X也用类似的方法:

    然后发现

    卧槽,还真的刚好是标准抛物线的方程诶!

    至此,我们基本可以认为,这个基向量转换矩阵是正确的!有兴趣的童鞋可以自行把写死的数字换成字母再推导一次。

    从标准抛物线到二次贝塞尔曲线,使用的是上述代码的矩阵,而如果要反过来,从二次贝塞尔曲线转换回标准的抛物线,那就是前面所提到的矩阵的逆矩阵了。

    这里本来应该总结下的,但似乎已经写长了,放到下一篇吧,把图带着,然后逐个步骤写出来,相信大家还是能记得的,哈哈,下篇我用代码把转换矩阵实现出来,然后就可以尝试用它来进行一些简单的求交运算了,敬请期待!

     

     

    展开全文
  • 现在我们给出一个方程组,然后尝试用矩阵来求解。 在连载十六中,我们给出了曲线类型的判断法则: ...第一条方程,A=1,B=-2,C=1,Δ=B^2-4AC=(-2)^2-4*1*1=0,为抛物线(或者叫二次贝塞尔曲线) 第二条...

    现在我们给出一个方程组,然后尝试用矩阵来求解。

    在连载十六中,我们给出了曲线类型的判断法则:

    Δ<0时,方程为椭圆(包括正圆)

    Δ>0时,方程为双曲线

    Δ=0时,方程为抛物线

    其中Δ=B^2-4AC

    现在我们来判断给定的两条方程的曲线类型

    第一条方程,A=1,B=-2,C=1,Δ=B^2-4AC=(-2)^2-4*1*1=0,为抛物线(或者叫二次贝塞尔曲线)

    第二条方程,A=1,B=3,C=2,Δ=B^2-4AC=3^2-4*1*2=1,为双曲线

    双曲线的标准方程为x^2-y^2=1,消元也会产生根号,所以我们用第一条方程做矩阵变换。

    然后,我们用连载十六的方法,通过旋转一个θ角消去xy项,使其向标准抛物线靠拢

    把旋转角的计算方法搬过来。

    然后有θ=-φ/2

    代入到cosφ中,得到

    φ=90度,然后θ=-φ/2=-45度

    所以我们套-45度的逆矩阵到第一条方程中即可。

    现在我们是手算,所以完全可以把前面的系数去掉以简化,只要后面的方程用同样的矩阵即可。

    代入到第一条方程,得到

    虽然不是标准方程,但是似乎没有必要再往下化简了。因为用Y表示X的式子已经非常简洁清晰

    然后我们用

    代入到第二条方程,得到

    然后用

    进行代入

    这个方程我就不手动解了,直接扔到四次方程的类中求解,得到如下结果:

    然后通过

    把x给算出来。

    最后,运用

    即可把4组解都求出来。

    虽然演算过程看起来挺长,但却通过一个简单的换元公式巧妙地躲开了开方和去根号的运算。而这个换元公式看似简单,实则蕴含了丰富的矩阵思想,是矩阵史诗级玩法返璞归真的最好见证!

    我们可以用矩阵来解二元二次方程组了,那么更高次数的方程我们可以解出来么?就我目前的认知范围来看,是没有办法完全做到的。原因在于三次曲线并不能通过矩阵变成固定的标准曲线。如下图,同样是三次贝塞尔曲线,它们之间就无法用一个矩阵实现转换。

    但是也能借助这一思路进行简化,比如化简其中一条为y=x^3,然后代入到另一条中。

    事实上,一元三次方程的卡尔丹公式正是矩阵变换的体现。在去掉二次项的时候,我们用到了如下的换元公式。

    x和y之间虽然只是相差一个常数,但若站在矩阵的角度来思考,它不正是一个平移的矩阵吗?

    至此,矩阵史诗级玩法系列教程已经接近尾声。但是我并没有在这篇的标题上加上“完”字,因为更返璞归真的事情还在后面。我将给大家布置一个小作业,其中包含实现代码,但是核心算法的注释一句不写,大家如果可以从中看出其实现原理,那恭喜你,你已经毕业了!

     

    展开全文
  • 1.取得元素的曲线,比如风管 LocationCurve元素曲线 LocationCurve curve = duct.Location as LocationCurve; 取得可以根据曲线确定位置元素的曲线。...SetComparisonResult枚举,判断相交类型 SetCompari...
    1.取得元素的曲线,比如风管
    LocationCurve元素曲线
    LocationCurve curve = duct.Location as LocationCurve;
    取得可以根据曲线确定位置的元素的曲线。
    2.根据曲线取得交点
    IntersectionResultArray交点数组
    SetComparisonResult枚举,判断相交类型
    SetComparisonResult result = curve1.Intersect(curve2,out intersectionResultArray);
    if(SetComparisonResult.Disjoint != result)//相交
    {
        XYZ xyz 
    = intersectionResultArray.get_Item(0).XYZPoint;
    3.选取一个元素,可以得到选取点坐标。
    reference = sel.PickObject(ObjectType.Element, ductSelectionFilter, "选择第一个风管");
    Duct duct 
    = doc.GetElement(myReference) as Duct;
    XYZ xyz 
    = reference.GlobalPoint;
    from:http://revit.5d6d.com/thread-1225-1-1.html
    展开全文
  • GeneralPath 类表示根据直线、二次曲线和三次 (Bézier) 曲线构造几何路径。它可以包含多个子路径。 缠绕规则指定确定路径内部方式。缠绕规则有两种类型:EVEN_ODD 和 NON_ZERO。 EVEN_ODD 缠绕规则意味着,
  • 第19章 代码的二次开发22 19.1 数据对齐 19.2 增加空间 19.2.1 区块间隙 19.2.2 手工构造区块 19.2.3 工具辅助构造区块 19.3 获得函数调用 19.3.1 增加输入函数 19.3.2 显式链接调用DLL 19.4 代码重定位 19.4.1 ...
  •  实例111 使用重载方法实现不同类型数据计算 135 5.2 结构与类 136  实例112 通过结构计算矩形面积 136  实例113 通过类继承计算梯形面积 137  实例114 封装类实现一个简单计算器 139  实例115 使用...
  • excel使用

    2012-11-25 17:06:01
    5、绘制函数图象做教学工作的朋友们一定会遇到画函数曲线的问题吧!如果想快速准确地绘制一条函数曲线,可以借助EXCEL的图表功能,它能使你画的曲线既标准又漂亮。你一定会问,是不是很难学呀?其实这一点儿也不难,...
  • 煤储层不同于常规油气藏,储层易受到伤害且伤害因素复杂。通过大量文献调研发现,前人...煤层伤害主控因素的确定及典型曲线的建立为低产井的储层诊断提供了参考依据,也对低产低效井的二次选井选层改造具有重要指导意义。
  • 集成电路的类型很多,从大的方面可以分为模拟电路和数字集成电路2 大 类。数字集成电路广泛用于计算机、控制与测量系统,以及其它电子设备中。 一般说来,数字系统中运行的电信号,其大小往往并不改变,但在实践分布...
  • 2. 某使用 window 运行测试结果 <p><img alt="run in window" src="https://img-blog.csdnimg.cn/img_convert/ae62e3d20f02830e182122cff0cc755c.png" /></p> 可以看出:这两种方式测试运行效率差不多。...
  • GetDriveType 判断一个磁盘驱动器的类型 GetExpandedName 取得一个压缩文件的全名 GetFileAttributes 判断指定文件的属性 GetFileInformationByHandle 这个函数提供了获取文件信息的一种机制 GetFileSize 判断...
  •  可以通过曲线的曲率来判断曲线的光顺性,可以检查曲线与点阵的吻合性,还可以改变曲线与其它曲线的连续性(连接、相切、曲率连续)。Surfacer 提供很多工具来调整和修改曲线。    三、曲面创建过程  决定生成...
  • 变量的类型声明 变量的类型声明 每个变量必须预先声明其类型。如 int a; int b = 100; float j = 4.5; string s1; 用 object 可以表示所有的类型。 预定义类型 下表列出了预定义类型,并说明如何使用。 类型 object...
  • 4.5.5 预览:用二次、三次内插生成贝塞尔曲线 4.5.6 表示直线和平面 4.6 求两个线段交点 4.6.1 直线求交应用:过三点圆 4.7 直线和平面求交及裁剪 4.8 多边形求交问题 4.8.1 处理凸多边形和凸多面体 4.8.2 ...
  • 1. 化二重积分为二次积分 2. 利用极坐标计算二重积分 练习题八 下册-线性代数与概率论 1.行列式 1.行列式引入和行列式概念 1.行列式引入 2.逆序和逆序数计算 3.行列式定义 2.行列式计算 1. 行列式...
  • 4.5.5 预览:用二次、三次内插生成贝塞尔曲线 4.5.6 表示直线和平面 4.6 求两个线段交点 4.6.1 直线求交应用:过三点圆 4.7 直线和平面求交及裁剪 4.8 多边形求交问题 4.8.1 处理凸多边形和凸多面体 4.8.2 ...
  • Windows API函数大全

    热门讨论 2010-02-04 09:04:57
    FindNextPrinterChangeNotification 用这个函数判断触发一打印机改变通告信号原因 FreePrinterNotifyInfo 释放由FindNextPrinterChangeNotification函数分配一个缓冲区 GetForm 取得与指定表单有关信息 ...
  • 实例91 求一元二次方程根 257 实例92 统计出现次数 259 实例93 求三角函数值 261 实例94 矩阵中最大值与最小值 263 实例95 利用指针排列数 265 实例96 阶乘倒数之和 267 实例97 孪生素数 268 实例98 ...
  • 2019数据运营思维导图

    2019-03-29 21:34:09
    可以用来监控大R用户异常变化情况 如果该值异常波动,请进一步看鲸鱼用户数据 4、用户留存 新用户留存 次日、3日、7日、14日、30日留存 次日留存是对玩家“第一游戏体验”的最佳印证 与游戏的类型、题材、玩法、美术...
  • 数据运营思维导图

    2018-04-26 14:24:22
    与游戏的类型、题材、玩法、美术风格、游戏前期内容吸引度、新手引导有效性有直接的相关性 如果导入的新增玩家群体对游戏题材、玩法、美术风格不予认可,留存将会很差,且可优化的空间较小 优化新手引导和前期的...
  • 第14章 兴趣曲线——游戏体验的判断准则 第15章 有一种体验叫做事 第16章 玩家通过交互界面体验游戏 第17章 故事和游戏在世界中发生 第18章 世界中角色 第19章 世界包含着空间 第20章 世界美学定义了世界...

空空如也

空空如也

1 2 3 4 5
收藏数 81
精华内容 32
关键字:

判断二次曲线的类型