szukam algorytmu rysowania punktu przy czym podaje się jego promień , jak jest promień 1 to wiadomo że proste ale jak jest np 3 piksele promień czyli 6 pikseli na średnice to diabeł wie jak to oszacować...
Algorytm rysowania okręgu/koła
- Rejestracja: dni
- Ostatnio: dni
- Postów: 679
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Poznań
- Postów: 539
Z równania okręgu to zrób
- Rejestracja: dni
- Ostatnio: dni
- Postów: 679
pięknie tylko ja nie jestem pitagorasem
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Poznań
- Postów: 539
Sprawdzasz każdy punkt czy spełnia rownanie
- Rejestracja: dni
- Ostatnio: dni
- Postów: 679
pisze przecież nie poradzę sobie z tym sam, ja z matmy w gimnazjum miałem czwórki na koniec roku bo nauczyciel świetnie wykładał, jak ja to mam sprawdzić, w pętli?
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Poznań
- Postów: 539
Jak ja mam Ci to wyjaśnić skoro nie potrafisz zrobić pętli dla x i pętli dla y i wstawić ifa z rownaniem? Nie jestem teraz przy komputerze więc kodu nie napiszę za Ciebie
- Rejestracja: dni
- Ostatnio: dni
- Postów: 679
jak będziesz przy kompie daj znać, będę wdzięczny jak chcesz to napisz kod dla mnie tym lepiej...
EDIT: myślałem też że by namalować koło przez sinusa i cosinusa od jednego piksela promieniem i po każdym zaokrągleniu zwiększać promień i na nowo rysowac koło z zwiększonym promieniem o jeden
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Poznań
- Postów: 539
int srodek_okregu_x;
int srodek_okregu_y;
int promien;
for(int y=srodek_okregu_y-promien;y<srodek_okregu_y+promien;y+=1){
for(int x=srodek_okregu_x-promien;x<srodek_okregu_x+promien;x+=1){
if(pow(srodek_okregu_x-x,2)+pow(srodek_okregu_y-y,2)<pow(promien,2))
rysuj_punkt(x,y);
}
}
- Rejestracja: dni
- Ostatnio: dni
- Postów: 679
pow oznacza potęgę z tego co pamiętam ? pow ?
sorry juz mam https://cpp0x.pl/dokumentacja/standard-C/pow/34 muszę ręcznie dopisać tą funkcje, pow jest na VC++ 6.0 i działa ...
były błędy dwukropek zamiast średników ale już działa, dzięki Ci
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Poznań
- Postów: 539
Sorry za ten błąd, piszę z telefonu. Ważne że działa
- Rejestracja: dni
- Ostatnio: dni
- Postów: 679
zrobiłem alhpa test:
void PointXY(int srodek_okregu_x,int srodek_okregu_y,int promien)
{
unsigned char redUC_BD=rt;
unsigned char greenUC_BD=gt;
unsigned char blueUC_BD=bt;
for(int y=srodek_okregu_y-promien;y<srodek_okregu_y+promien;y+=1){
for(int x=srodek_okregu_x-promien;x<srodek_okregu_x+promien;x+=1){
if(pow(srodek_okregu_x-x,2)+pow(srodek_okregu_y-y,2)<pow(promien,2))
if(alphablend!=modeB)
PutPixelT(x,y);
else
{
unsigned char redUC_DB;//=drawbuffor[indexB];
unsigned char greenUC_DB;//=drawbuffor[indexB+1];
unsigned char blueUC_DB;//=drawbuffor[indexB+2];
GetPixel(x,y,redUC_DB,greenUC_DB,blueUC_DB);
float r1,g1,b1;
r1=float(redUC_DB)/255;
g1=float(greenUC_DB)/255;
b1=float(blueUC_DB)/255;
float r_out,g_out,b_out;
float r2,g2,b2;
r2=float(redUC_BD)/255;
g2=float(greenUC_BD)/255;
b2=float(blueUC_BD)/255;
r_out=alphatest*r1 + (1 - alphatest)*r2;
g_out=alphatest*g1 + (1 - alphatest)*g2;
b_out=alphatest*b1 + (1 - alphatest)*b2;
unsigned char rW=r_out*255;
unsigned char gW=g_out*255;
unsigned char bW=b_out*255;
Color3iT(rW,gW,bW);
PutPixelT(x,y);
}
}
}
}
draw.AlphaBlend(modeB);
draw.AlphaTest(0.75);
draw.Color3iT(255,255,255);
draw.PointXY(128,128,50);
draw.AlphaBlend(modeNone);
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Poznań
- Postów: 9016
szukam algorytmu rysowania punktu przy czym podaje się jego promień
Tak od strony formalnej - jeśli mówimy o promieniu to już nie jest punkt, tylko okrąg albo koło
A tak poza tym - bardzo nie podoba mi się Twoje podejście do tematu - zamiast poszukać (albo skorzystać z GPT, który na 99% ogarnie temat w 5 sekund) to piszesz z postawą roszczeniową - pisze przecież nie poradzę sobie z tym sam czy jak chcesz to napisz kod dla mnie tym lepiej....
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Holandia
- Postów: 853
wilkwielki napisał(a):
szukam algorytmu rysowania punktu przy czym podaje się jego promień , jak jest promień 1 to wiadomo że proste ale jak jest np 3 piksele promień czyli 6 pikseli na średnice to diabeł wie jak to oszacować...
A to nie chodzi o PI ?masz 4 przejścia,jeśli zmieniasz jedną wartość na + a jedną na - to wyjdzie Ci idalny skos. Ten parametr wraz ze zmianą powinien się zmniejszać. Dynamiczna zmiana wartości na + i -. Np. na osi X zmieniasz wartość o 1 w pierwszym przejściu, w drugim o 0.99 , w trzecim o 0.98 itp. aż do 0 potem zwiększasz coraz bardziej.
- Rejestracja: dni
- Ostatnio: dni
https://en.wikipedia.org/wiki/Midpoint_circle_algorithm
https://godbolt.org/z/c7dPTPW3M
class Canvas {
public:
Canvas(size_t w, size_t h)
: m(h, std::string(w, ' '))
{
}
void point(size_t x, size_t y, char ch = '*')
{
m[y][x] = ch;
}
// Midpoint Circle Drawing Algorithm
void drawCircle(int xc, int yc, int r, char ch = '*')
{
int x = 0;
int y = r;
int d = 1 - r;
drawCirclePoints(xc, yc, x, y, ch);
while (x < y) {
x++;
if (d < 0) {
d += 2 * x + 1;
} else {
y--;
d += 2 * (x - y) + 1;
}
drawCirclePoints(xc, yc, x, y, ch);
}
}
std::ostream& writeTo(std::ostream& out) const {
for (const auto& r : m) {
out << r << '\n';
}
return out;
}
private:
void drawCirclePoints(int xc, int yc, int x, int y, char ch = '*')
{
point(xc + x, yc + y, ch);
point(xc - x, yc + y, ch);
point(xc + x, yc - y, ch);
point(xc - x, yc - y, ch);
point(xc + y, yc + x, ch);
point(xc - y, yc + x, ch);
point(xc + y, yc - x, ch);
point(xc - y, yc - x, ch);
}
private:
std::vector<std::string> m;
};