public CoLqueryData liftQuery(Vector3 refVector) { CoLqueryData qry = new CoLqueryData(); Vector3 testVelocity = refVector; speed = testVelocity.magnitude; float angleOfAttackRad = 0f; if (liftTransform != null) { angleOfAttackRad = CalculateAoA(liftTransform, testVelocity); } float liftCoeff = 2f * Mathf.PI * angleOfAttackRad; lift = 0.5f * liftCoeff * airDensity * (speed * speed) * wingArea; float aspectRatio = (span * span) / wingArea; float dragCoeff = zeroLiftDrag + (liftCoeff * liftCoeff) / (Mathf.PI * aspectRatio * efficiency); drag = 0.5f * dragCoeff * airDensity * (speed * speed) * wingArea; lift *= power; drag *= power; qry.pos += liftTransform.position; qry.dir += -liftTransform.up * lift; qry.lift += qry.dir.magnitude; //qry.dir.Normalize(); return(qry); }
public void OnCenterOfLiftQuery(CenterOfLiftQuery qry) { if (moduleID == 0) { CoLqueryData queryData = new CoLqueryData(); queryData.refVector = qry.refVector; for (int i = 0; i < liftSurfaces.Count; i++) { CoLqueryData newQuery = liftSurfaces[i].liftQuery(queryData.refVector); float influence = new Vector2(queryData.dir.magnitude, newQuery.dir.magnitude).normalized.y; queryData.pos = Vector3.Lerp(queryData.pos, newQuery.pos, influence); queryData.lift += newQuery.lift; queryData.dir = Vector3.Lerp(queryData.dir, newQuery.dir, influence); } queryData.dir.Normalize(); qry.dir = queryData.dir; qry.lift = queryData.lift; qry.pos = queryData.pos; } }
public CoLqueryData liftQuery(Vector3 refVector) { CoLqueryData qry = new CoLqueryData(); Vector3 testVelocity = refVector; speed = testVelocity.magnitude; float angleOfAttackRad = 0f; if (liftTransform != null) angleOfAttackRad = CalculateAoA(liftTransform, testVelocity); float liftCoeff = 2f * Mathf.PI * angleOfAttackRad; lift = 0.5f * liftCoeff * airDensity * (speed * speed) * wingArea; float aspectRatio = (span * span) / wingArea; float dragCoeff = zeroLiftDrag + (liftCoeff * liftCoeff) / (Mathf.PI * aspectRatio * efficiency); drag = 0.5f * dragCoeff * airDensity * (speed * speed) * wingArea; lift *= power; drag *= power; qry.pos += liftTransform.position; qry.dir += -liftTransform.up * lift; qry.lift += qry.dir.magnitude; //qry.dir.Normalize(); return qry; }