如何判断代码(t1和t2)中二次方程的输出是实数还是复数?该程序的目标是获取两个对象的坐标和速度,以查看它们是否发生碰撞。如果t1或t2的值很复杂,那么它们就不会发生冲突,这就是为什么我需要帮助弄清楚如何判断t1和t2是否复杂的原因。
#include <iostream>
#include <string>
#include <cmath>
using std::cout;
using std::cin;
using std::string;
int main() {
string id;
double x = -34.94;
double y = -69.13;
double vx = 0.468;
double vy = -0.900;
double x2 = -43.08;
double y2 = 92.12;
double vx2 = -0.811;
double vy2 = -0.958;
double r1 = x2-x;
double r2 = y2-y;
double v1 = vx2-vx;
double v2 = vy2-vy;
double b = (2*r1*v1) + (2*r2*v2);
double a = (v1*v1) + (v2*v2);
double c = ((r1*r1) + (r2*r2))-100;
double s = pow(b,2)-(4*a*c);
double t1 = ((b*-1) + sqrt(s)) / (2*a);
double t2 = ((b*-1) - sqrt(s)) / (2*a);
}
答案 0 :(得分:3)
对于二次方程式,您只需计算它的判别式。如果它小于0,则根很复杂。
double s = pow(b,2)-(4*a*c);
if(s < 0) {
// roots will be complex. no collision
}