由于AR应用程序中的距离而导致游戏对象的颜色(渐变)变化

时间:2019-08-27 09:56:51

标签: c# unity3d augmented-reality

我正在尝试制作一个显示POI信息的AR应用程序。这些POI来自不同的距离,由于距离的缘故,我想用渐变比例将它们制成不同的颜色。

我已经用Haversine公式计算了GPS坐标下POI的距离,并尝试根据距离更改颜色,但是即使在我看到POI时通过步行更改了距离,它也不会更新颜色。我将WorldScaleAr场景用于AR。以下代码仅适用于一个POI。

using System;
using static System.Math;

double[,] coords = new double[,] { { 39.870613, 32.73341 } }; // POI location

void Start()
{
    // get poi Location
    lat1 = Math.PI * coords[0, 0] / 180.0;
    // lat2 = Math.PI * user[0, 0] / 180.0;
    lon1 = Math.PI * coords[0, 1] / 180.0;
    // lon2 = Math.PI * user[0, 1] / 180.0;

}

void Update()
{
    // Get user location
    // Latitude
    x = getLocation.x1.ToString();
    user_lat = Convert.ToDouble(x);
    user_lat_rad = Math.PI * user_lat / 180.0; // Radian
    // Longitude
    y = getLocation.y1.ToString();
    user_lon = Convert.ToDouble(y);
    user_lon_rad = Math.PI * user_lon / 180.0; // Radian

    // Change POIs sizes
    distances = Convert.ToSingle(distance(user_lat_rad, user_lon_rad));
    GetComponent<Renderer>().material.color = new Color((distances*255f/1000f)/255f, (distances*255f/1000f)/255f, (distances*255f/1000f)/255f);

public double distance(double lat2, double lon2)
{
    // Haversine Formula
    // Lat2,Lon2 = User Location
    // Lat1,Lon1 = POI Location
    double dist1 = Sqrt((Pow(Sin((lat2 - lat1) / 2), 2)) + Cos(lat2) * Cos(lat2) * (Pow(Sin((lon2 - lon1) / 2), 2)));
    double distance = 2 * r * Asin(dist1);
    return distance;
}

1 个答案:

答案 0 :(得分:0)

距离函数返回什么值?我在问数值的数量级。这是:distances * 255f / 1000f)/ 255f等于distance / 1000,因此您也可能会获得接近零的值,或者如果它大于1000(不确定此处的单位),则该值> 1。