Według mnie jest sporo niedopowiedzeń w poleceniu, bo faktycznie powinniśmy działać na tablicach, a te lubią liczby całkowite, a nie zmiennoprzecinkowe, stąd albo działamy tylko na tych pierwszych, albo dokonujemy konwersji (czego odradzam, bo będzie pracochłonne, a niekoniecznie poprawi nam obliczenia).
Tablica jednowymiarowa... Hm... Jeżeli ma to być animacja na płaszczyźnie dwuwymiarowej, to będzie nam właśnie dwuwymiarowa tablica potrzebna, szczególnie jeżeli chcemy ją rysować. Krok t również wydaje mi się za mały na liczby stałoprzecinkowe.
Na podstawie Twojego kodu napisałem analogiczny, żeby Ci coś zilustrować w jaki sposób to zrealizować... Wizualnie zobaczysz co dzieje się podczas przebiegu pętli, program rysuje „okrąg” i „cykloidę” : )
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <unistd.h>
#include <conio.h>
#define SIZE 20
int main() {
int a = 1;
int b = 1;
int c = 5;
int x1, y1, x2, y2;
char dlaOkregu[SIZE][SIZE];
char dlaCykloidy[SIZE][SIZE];
for (int i = 0; i < SIZE; i++) {
for (int j = 0; j < SIZE; j++) {
dlaCykloidy[i][j] = ' ';
dlaOkregu[i][j] = ' ';
}
}
for(int t=0;t< SIZE;t++) {
x1 = (a * t) - (b * sin(t));
y1 = a - (b * cos(t));
x2 = 7 + c * cos(t);
y2 = 7 + c * sin(t);
printf("Wspolrzedne cykloidy: (%d;%d)\n", x1, y1);
for (int i = 0; i < SIZE; i++) {
for (int j = 0; j < SIZE; j++) {
dlaCykloidy[x1][y1] = 'O';
printf("%2c", dlaCykloidy[i][j]);
}
printf("\n");
}
printf("Wspolrzedne okregu: (%d;%d)\n", x2, y2);
for (int i = 0; i < SIZE; i++) {
for (int j = 0; j < SIZE; j++) {
dlaOkregu[x2][y2] = 'O';
printf("%2c", dlaOkregu[i][j]);
}
printf("\n");
}
usleep(600000);
system("cls");
if (x1 > SIZE || x2 > SIZE || y1 > SIZE || y2 > SIZE)
break;
}
return 0;
}
Wtedy na wyjściu otrzymasz:
Wspolrzedne cykloidy: (18;0)
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
Wspolrzedne okregu: (11;7)
O O O O
O O
O
O
O
O O
O
O
O O
O O O O
O
Kluczowy będzie dobór parametrów a,b,c,t, bo zauważ, że cykloida, gdy "za długo" będzie się kręcić to nie ma szans się spotkać z okręgiem. Stwórzmy tablicę dwuwymiarową, wypełnijmy ją spacjami. Dla każdej z dwóch plansz (możesz zrobić na jednej) obliczamy współrzędne i zaznaczmy ten punkt literką O dla każdej nowej iteracji (możesz zmodyfikować, że za każdym przelotem napisze inny znak). Ja rozszerzyłem wyświetlanie do dwóch jednostek, aby w naturalny sposób była to kwadratowa siatka. Potem czyścimy konsolę. Jeśli piszesz pod Linux jest na to gotowa funkcja:
void ClrScr(){
printf("\033[2J"); // Czyści ekran
printf("\033[0;0f"); // Ustawia kursor w lewym, górnym rogu
}
Jeżeli jesteś zmuszony korzystać z Windowsa to albo trzeba pobawić się z powrotem karetki lub zastosować gotowca system("cls"); z conio.h. (W wyjątkowych okolicznościach powiedzmy, że można :P)
Nie jest to finalna wersja jednak umożliwi Ci ona zrealizowanie Twojego problemu np. poprzez dodanie warunku, który zrywałby pętlę wyznaczoną przez t gdy współrzędne punktów pokryłyby się...
Musisz po prostu przemyśleć jaka odpowiedź usatysfakcjonuje prowadzącego oraz który ze sposobów będzie dla Ciebie zrozumiały ; ) Powodzenia w dalszym kodzeniu!