当前位置: 首页 > 知识库问答 >
问题:

几何学:从一个正方形的边缘到该正方形内可能的最大圆的边缘的距离

单品
2023-03-14

数学从来都不是我的强项。:)给定一个任意大小的正方形画布,以像素为单位,我在该画布中绘制宽度为1的最大可能的圆。然后我想画一个矩形(不一定是正方形),在圆的中心与圆的角接触。所以我需要一个公式来计算左上角像素的X和Y坐标,给出圆的直径。或者,给定画布顶部的X个像素数和左侧的Y个像素数,我需要一个公式来找到该圆边缘上垂直和水平匹配点的X/Y坐标。谢了!:)

共有1个答案

邹桐
2023-03-14

假定正弦规则适用,圆内正方形边的长度应该是Len=(Dia/sin(90))/2,那么左上角的X和Y坐标都是((dia-len)div2)。对于矩形,inc/dec等于X和Y。在Delphi中:

    procedure SquareInCircle(Dia: Integer; var P: TPoint; Padding: Integer = 0);
    //Given a circle of diameter Dia, find the X and Y of the
    //upper-left corner of a square with corners on the rim
    //of the circle.  Consider the diameter @ 45°, which forms
    //a right triangle from the square; the length of any side
    //of the square is the diameter / sin(90) / 2, and from that,
    //the X and Y of the upper-left are (dia - len) / 2.  Since
    //we're working in pixels, results are kept as integers.
    var
      L: Integer;
    begin
      L := Round((Dia / Sin(90)) / 2);
      P.X := ((Dia - L) div 2) + Padding;
      P.Y := P.X;
    end;

    procedure RectInCircle(Dia, Ofs: Integer; var P: TPoint; Padding: Integer = 0);
    //Ofs is the number of pixels to offset from square to rectangle.
    //If ofs is negative, the rectangle is taller than it is high;
    //if ofs is positive, the rectangle is wider than it is tall.
    //Ofs must be >= 0 and < (dia / 2).
    begin
      SquareInCircle(Dia, P, Padding);
      Dec(P.X, Ofs);
      Inc(P.Y, Ofs);
    end;
 类似资料:
  • 这可以作为一个辅助对象来查看geometry的边缘。 代码示例 const geometry = new THREE.BoxGeometry( 100, 100, 100 ); const edges = new THREE.EdgesGeometry( geometry ); const line = new THREE.LineSegments( edges, new THREE.LineBa

  • 问题内容: 这是我的CSS。 CSS 输出是六边形的4个边缘是弯曲的,但顶部和底部不是。我想使六边形的所有边缘弯曲。如何使上下边缘弯曲?或如何使三角形的上边缘弯曲? 问题答案: 我想您正在寻找这个。 CSS

  • 问题内容: 现在,我可以比较X和Y以检查是否发生碰撞,但这仅是两个对象在完全相同的X和Y位置彼此正确通过时。我需要更精确地检查碰撞,以检查是否有刮痕,因为缺少更好的术语。我有X,Y,X和Y比例的变量以及X和Y的速度。非常感谢您的帮助:D 编辑:正方形! 问题答案: 如果您的正方形无法旋转,这很简单:说是每个边的长度,一个正方形的中心,另一个正方形的中心。然后: 更复杂的情况是正方形是否可以旋转。在

  • 我想检测具有一定角度/方向的边缘。 根据SO中的帖子改编,我想出了使用OpenCV幅值、相位和Sobel函数来过滤不需要的边缘点。然后使用幅值图像(以相位图像为条件)输出边缘点。 然而,结果与Canny边缘函数不相似。最好是过滤掉带有不需要的角度的边缘,但检测到的边缘是点的斑点,而不是细线边缘 在使用findContour后,左边缘图像也会绘制出来,但这几乎没有帮助 1) 为了模仿精明的处理,还应

  • 有一个州(地区),它是根植于节点1的树。该州所有城市(编号从1到N+1)都是通过双向道路连接起来的。你得在每条路上加通行费税。该州有N条公路连接各城市。您必须在道路上分配通行费税,以便最大限度地实现以下所述的功能通行费: 你得把通行费税最大化。根据给定数组A中的通行费税分配道路(每个值只使用一次)。查找获得的最大通行费。 输入格式: 第一行包含 N和一个值始终为2的整数。 那么, 接下来的N条道路

  • 我的假设是,如果处理器对两个边都有传入项,并且其中一个tryProcess()返回false,那么将处理另一个边(如果在这样的边上有更多的传入项)。根据哪个边缘停止处理和哪个边缘接受它们来交替传入项。 有时会发生一个处理器实例阻塞tryProcess(#0),它总是返回false(因为我们希望处理来自其他edge的新项)。tryProcess(#0)被重新调用,而tryProcess(#1)从不被