zoukankan      html  css  js  c++  java
  • Direct2D (28) : 获取几何图形的面积、线总长度和指定位置的点坐标


    uses Direct2D, D2D1;
    
    procedure TForm1.FormPaint(Sender: TObject);
    var
      cvs: TDirect2DCanvas;
      iEllipseGeometry: ID2D1EllipseGeometry;
      area,length: Single;
      rPointF1,rPointF2: TD2DPoint2f;
      ptCenter: TPoint;
    begin
      ptCenter := Point(ClientWidth div 2, ClientHeight div 2);
      D2DFactory.CreateEllipseGeometry(D2D1Ellipse(ptCenter, ClientWidth/4, ClientHeight/4), iEllipseGeometry);
    
      {获取面积与周长}
      iEllipseGeometry.ComputeArea(TD2DMatrix3x2F.Identity, 0, area);
      iEllipseGeometry.ComputeLength(TD2DMatrix3x2F.Identity, 0, length);
    
      {获取图形的起始处和 1/4 处的点}
      iEllipseGeometry.ComputePointAtLength(0, TD2DMatrix3x2F.Identity, 0, @rPointF1, nil);
      iEllipseGeometry.ComputePointAtLength(length/4, TD2DMatrix3x2F.Identity, 0, @rPointF2, nil);
    
      cvs := TDirect2DCanvas.Create(Canvas, ClientRect);
      cvs.BeginDraw;
      cvs.RenderTarget.Clear(D2D1ColorF(clWhite));
    
      cvs.Font.Size := 9;
      cvs.TextOut(5, 5, Format('面积: %f; 周长: %f', [area, length]));
    
      cvs.DrawGeometry(iEllipseGeometry);
    
      cvs.MoveTo(ptCenter.X, ptCenter.Y);
      cvs.LineTo(Trunc(rPointF1.x), Trunc(rPointF1.y));
      cvs.MoveTo(ptCenter.X, ptCenter.Y);
      cvs.LineTo(Trunc(rPointF2.x), Trunc(rPointF2.y));
    
      cvs.EndDraw;
      cvs.Free;
    end;
    
    procedure TForm1.FormResize(Sender: TObject);
    begin
      Repaint;
    end;
    


    效果图:



  • 相关阅读:
    【算法】Manacher算法
    python 02 python入门知识
    python 01:计算机基础知识
    表示数值的字符串
    C++ 迭代器(STL迭代器)iterator详解
    构建乘积数组
    C++ 容器(STL容器)
    数组中重复的数字
    把字符串转换成整数
    十大经典排序算法
  • 原文地址:https://www.cnblogs.com/del/p/2008119.html
Copyright © 2011-2022 走看看