int calculate_pixel(t_pov *pov, t_pixel *pixel, t_object *objects, t_coordinate *lightsource) { t_coordinate rayvector; int i; int color; t_intersect intersect; t_intersect intersectsaved; intersectsaved.k = 0.0; i = 0; calculate_vector(pov, pixel, &rayvector); color = 0x00000000; while (i < OBJECTS_NB) { intersect = calculate_intersection(pov, &rayvector, &objects[i]); if ((intersect.k < intersectsaved.k && intersect.k > 0) || (intersect.k > 0 && intersectsaved.k == 0)) intersectsaved = intersect; i++; } if (intersectsaved.k != 0) color = find_color(&intersectsaved, pov, &rayvector, lightsource, objects); return (color); }
std::vector<MyMarker *> calculate_vectors(vector<MyMarker *> const segment, MyMarker *parent){ std::vector<MyMarker *> vectors(segment.size()); MyMarker *marker; for (int i = 0; i < segment.size(); i++){ // Calculating vector from parent to child, approximating tangent vector if (i > 0) parent = segment[i-1]; if (i < segment.size()-1) marker = segment[i+1]; else // Node is either terminal or bifurcation, so use vector from parent to self marker = segment[i]; vectors[i] = calculate_vector(marker, parent); /* Calculating from current node to child vectors[i] = calculate_vector(marker, parent); */ /* if (parent){ double sum_sq = 0; vectors[i] = new MyMarker(); vectors[i]->x = marker->x - parent->x; sum_sq += vectors[i].x * vectors[i].x; vectors[i]->y = marker->y - parent->y; sum_sq += vectors[i].y * vectors[i].y; vectors[i]->z = marker->z - parent->z; sum_sq += vectors[i].z * vectors[i].z; double mag = sqrt(sum_sq); vectors[i]->x /= mag; vectors[i]->y /= mag; vectors[i]->z /= mag; }else{ vectors[i] = nullptr; }*/ } return vectors; };