You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何计算等边三角形外接圆与另一圆的6个交点坐标?

等边三角形外接圆与中心绿圆的6交点计算方案(P5JS/Processing实现)

核心思路

  1. 利用等边三角形对称特征:已知外接圆半径r,中心到每条边的距离(内切圆半径)固定为r/2,三条边的中垂线分别指向外接圆的三个顶点,两两夹角120°。
  2. 计算边的垂足点:每个边的垂足点是中心沿中垂线方向移动r/2的位置。
  3. 计算交点偏移量:绿圆半径为radius时,从垂足点沿边的垂直方向(中垂线旋转±90°)移动的距离为sqrt(radius² - (r/2)²)(半弦长)。
  4. 批量生成6个交点:对三条边分别计算两个交点,得到P1至P6。

P5JS实现代码

let cx = 200;    // 外接圆圆心x坐标
let cy = 200;    // 外接圆圆心y坐标
let r = 100;     // 外接圆半径
let radius = 120;// 绿色圆半径

let intersections = []; // 存储6个交点

function setup() {
  createCanvas(400, 400);
  calculateIntersections();
}

function draw() {
  background(220);
  
  // 绘制外接蓝色圆
  stroke(0, 0, 255);
  noFill();
  ellipse(cx, cy, 2*r, 2*r);
  
  // 绘制等边三角形
  stroke(0);
  let p0 = createVector(cx + r*cos(radians(0)), cy + r*sin(radians(0)));
  let p1 = createVector(cx + r*cos(radians(120)), cy + r*sin(radians(120)));
  let p2 = createVector(cx + r*cos(radians(240)), cy + r*sin(radians(240)));
  line(p0.x, p0.y, p1.x, p1.y);
  line(p1.x, p1.y, p2.x, p2.y);
  line(p2.x, p2.y, p0.x, p0.y);
  
  // 绘制绿色圆
  stroke(0, 255, 0);
  ellipse(cx, cy, 2*radius, 2*radius);
  
  // 绘制6个交点并标注
  fill(255, 0, 0);
  textSize(12);
  for (let i = 0; i < intersections.length; i++) {
    let p = intersections[i];
    ellipse(p.x, p.y, 6, 6);
    text(`P${i+1}`, p.x + 8, p.y - 8);
  }
}

function calculateIntersections() {
  intersections = [];
  let d = r / 2; // 中心到边的距离
  let l = sqrt(radius*radius - d*d); // 半弦长
  
  // 遍历三条边的中垂线角度(0°, 120°, 240°)
  for (let angle = 0; angle < 360; angle += 120) {
    let rad = radians(angle);
    // 计算垂足点
    let footX = cx + d * cos(rad);
    let footY = cy + d * sin(rad);
    
    // 边的方向:中垂线角度 ±90°
    let dir1 = radians(angle + 90);
    let dir2 = radians(angle - 90);
    
    // 计算两个交点
    let pA = createVector(footX + l * cos(dir1), footY + l * sin(dir1));
    let pB = createVector(footX + l * cos(dir2), footY + l * sin(dir2));
    
    intersections.push(pA);
    intersections.push(pB);
  }
}

关键说明

  • 对称简化计算:借助等边三角形的120°旋转对称性,仅需循环3次即可生成所有交点,无需重复计算每条边的直线方程。
  • 参数灵活调整:修改cx、cy、r、radius的值即可适配不同场景,只要radius > r/2就能保证每条边与绿圆有两个交点。
  • 向量工具优化:使用P5JS的createVector存储坐标点,代码更简洁易读。

内容的提问来源于stack exchange,提问作者Richnou

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 04:45:38