C++ 如何检查Adafruit TFT屏幕上画的两个圆圈是否相互接触?

C++ 如何检查Adafruit TFT屏幕上画的两个圆圈是否相互接触?,c++,math,arduino,adafruit,C++,Math,Arduino,Adafruit,我在Adafruit TFT 1.8屏幕上制作(或者更确切地说,尝试制作,哈哈)一个蛇游戏。然后我当然需要蛇头知道它何时到达“点”,因此我需要知道两个大小相等的圆圈何时相互接触。但是,我的功能不起作用(换句话说,打印“不接触”) 我试图遵循这个公式: (sqrt(dx2+dy2)) 两个圆的半径都是3,我通过将屏幕位置x和y加在一起得到了公式的中心(我得到的中心是否正确?) void pointCondition(){ 双中心点=点位置X+点位置Y; 双中心蛇头=位置X+位置Y; int dis

我在Adafruit TFT 1.8屏幕上制作(或者更确切地说,尝试制作,哈哈)一个蛇游戏。然后我当然需要蛇头知道它何时到达“点”,因此我需要知道两个大小相等的圆圈何时相互接触。但是,我的功能不起作用(换句话说,打印“不接触”)

我试图遵循这个公式: (sqrt(dx2+dy2))

两个圆的半径都是3,我通过将屏幕位置x和y加在一起得到了公式的中心(我得到的中心是否正确?)

void pointCondition(){
双中心点=点位置X+点位置Y;
双中心蛇头=位置X+位置Y;
int distanceBetweenCenter=(sqrt(中心点*3+中心蛇头*3));
整数权重=3/2;
if(中心之间的距离<重量){
连续打印(“触摸”);
}否则{
Serial.println(“不接触”);
}
}

你能看出我做错了什么吗?

你需要这样的东西:

double dx = pointPositionX - positionX,
       dy = pointPositionY - positionY,
       d  = sqrt(dx * dx + dy * dy);
bool touching = d <= 3;
double dx=点位置x-位置x,
dy=点位置Y-位置Y,
d=sqrt(dx*dx+dy*dy);

bool touch=d不需要
sqrt
位——它浪费时间并降低准确性。只要做
bool touching=(dx*dx+dy*dy)稍微改变一下,就解决了我的问题。非常感谢,先生@更清楚,它增加了清晰度,OP更容易看到它与他的公式的关系。@Clear是的,我注意到它现在不太准确。不过我想说得更准确些,所以我试了一下你的台词。但效果似乎更糟。我用屏幕背景的相同颜色画了一个蛇头,所以如果我打得不够准确,它会把我的观点一分为二。但我想是吧?如果两个圆的半径均为3个单位,则当圆心相距6个单位时,它们将相互接触。
double dx = pointPositionX - positionX,
       dy = pointPositionY - positionY,
       d  = sqrt(dx * dx + dy * dy);
bool touching = d <= 3;