לחתוך BITMAPDATA הנחצה על ידי קו אחד

זה המקום לדון במתמטיקה, באלגוריתמים, במתודולוגיות תכנות, סימולציות פיזיקאליות, סביבות פיתוח ו-Frameworks. אפליקציות RIA מתוחכמות, קטעי קוד מורכבים או שימוש בקוד ByteLevel. אם אין לך מושג מה הדברים הללו מקומה של ההודעה שלך כנראה בפורום "שאלות כלליות".

לחתוך BITMAPDATA הנחצה על ידי קו אחד

הודעהעל ידי coolroy ב 22 אוקטובר 2010, 13:25

אם למשל יש לי צורה כלשהיא - ממש לא משנה איזו צורה, איך אני חותך אותה כאשר קו אחד מפריד בין 2 חלקים של הצורה ובעצם מפצל אותה ל 2 צורות חדשות?
הקו הזה יכול לבוא מכל זוית שהיא והוא קו ישר.

אני לא מנסה להעתיק אבל ישר כשנתקעתי נזכרתי שמישהו כבר פתר את זה פעם, אז הנה כמו שחותכים כאן את הקרח:
http://www.nitrome.com/games/icebreaker/

יש למישהו רעיון איך לעשות את זה?


כמה דוגמאות להמחשה:
תמונה
coolroy
 
הודעות: 146
הצטרף: 20 מרץ 2010, 17:56
מיקום: ירושליים

Re: לחתוך BITMAPDATA הנחצה על ידי קו אחד

הודעהעל ידי amihanya ב 22 אוקטובר 2010, 16:10

נראה לי שאפשר לסובב את הצורה לזוית שבה צוייר הקו, ואז ע"י bitmapdata לחצות אותה במקום שבו יש את הקו, כי אם סובבת לזווית של הקו, הקו יהיה בעצם בזוית ישרה.
בלוג פלאש http://amihanya.wordpress.com/
מופאש- מופע אש ולהטוטים http://www.mofash.com
אגדת להטוטים - המסע של להב http://agada.mofash.com
סמל אישי של המשתמש
amihanya
 
הודעות: 695
הצטרף: 14 מרץ 2010, 13:16
מיקום: פתח תקווה

Re: לחתוך BITMAPDATA הנחצה על ידי קו אחד

הודעהעל ידי coolroy ב 22 אוקטובר 2010, 17:34

נשמע כיוון טוב, הבעיה היחידה היא שצריך לסובב גם את האובייקט וגם את החתך מסביב לנקודה המרכזית של שניהם על מנת שהיחסים יישארו אותו הדבר ולא כל אחד יסתובב סתם ביחס ל CENTER POINT של עצמו (או לחלופין REGISTRATION POINT).

מה שאומר שצריך דרך לשנות את ה REGISTRATION POINT של שניהם ורק אז לסובב (למצוא את הנקודה זו לא ממש בעיה אבל אין תמיכה בשינויה).
coolroy
 
הודעות: 146
הצטרף: 20 מרץ 2010, 17:56
מיקום: ירושליים

Re: לחתוך BITMAPDATA הנחצה על ידי קו אחד

הודעהעל ידי רונן צמיר ב 23 אוקטובר 2010, 23:10

בשביל לשנות נקודת סיבוב בקוד ל נקודה x,y. אתה שם את הצורה שלך על ספרייט אחר בקורדינטות y-, x- אז כאשר תסובב את הספריט האחר תקבל סיבוב של הצורה סביב הנקודה המבוקשת.
רונן צמיר
 
הודעות: 404
הצטרף: 13 מרץ 2010, 21:57
מיקום: חולון -> הרצליה פיתוח

Re: לחתוך BITMAPDATA הנחצה על ידי קו אחד

הודעהעל ידי IAP ב 24 אוקטובר 2010, 09:16

במקרה של משחק הקרח הדבר שונה לגמרי.
לא מדובר בכלל בחיתוך BitmapData אלא בחישובים גיאומטרים. הקרח מיוצג כמספר קווים תוחם (זו גם צורת המידע שמקבל המנוע הפיסיקלי שמאפשר לקרח ליפול) כשאתה חותך את הקרח עם קו, מתבצעים חישובים גיאומטרים כדי ליצור שתי צורות סגורות נוספות.
סמל אישי של המשתמש
IAP
 
הודעות: 554
הצטרף: 15 מרץ 2010, 21:27

Re: לחתוך BITMAPDATA הנחצה על ידי קו אחד

הודעהעל ידי atarsh ב 24 אוקטובר 2010, 10:11

אין לי מה לתרום לדיון, אבל טושיי על המשחק :)
סמל אישי של המשתמש
atarsh
 
הודעות: 1310
הצטרף: 11 מרץ 2010, 09:02
מיקום: איפשהו.. around.

Re: לחתוך BITMAPDATA הנחצה על ידי קו אחד

הודעהעל ידי רונן צמיר ב 24 אוקטובר 2010, 10:25

אתה בטח יודע שאפשר ורצוי להפריד בין הלוגיקה וה VIEW בלוגיקה הצורות מוחזקות כמובן בורטקסים. אבל אחד הפיתרונות הקלים מבחינת ה VIEW יהיה לחתוך את ה BITMAP DATA של הקרח.
רונן צמיר
 
הודעות: 404
הצטרף: 13 מרץ 2010, 21:57
מיקום: חולון -> הרצליה פיתוח

Re: לחתוך BITMAPDATA הנחצה על ידי קו אחד

הודעהעל ידי IAP ב 24 אוקטובר 2010, 10:50

בטח שאני יודע את זה!

זה בכל מקרה תלוי מאוד ביישום שלו. במקרה של המשחק, המנוע הפיזילי שגורם לקרח להתרסק ככה זקוק למידע מספרי של הפוליגונים. ואם כבר יש לי מידע מספרי, אני אצייר את הגרפיקה מחדש על פי המידע.
במשחק אגב, הקרח לא נראה כאילו הגרפיקה נחתכה לאחר שחתכו אותו. הגבולות נהיים שונים, המילוי מקבל גרדיאנט יפה סביב האיזור שנחתך.

במקרה של חיתוך גרפיקה נטו אז הדרך ה"גולמית" מתאימה.
סמל אישי של המשתמש
IAP
 
הודעות: 554
הצטרף: 15 מרץ 2010, 21:27

Re: לחתוך BITMAPDATA הנחצה על ידי קו אחד

הודעהעל ידי רונן צמיר ב 24 אוקטובר 2010, 11:47

תרשה לי לא הסכים איתך. (זה כניראה קורה לנו הרבה :פרח: ) למה לצייר מחדש את הגרפיקה בעזרת המנוע UV של פלאש, או יותר גרוע, בעזרת אחת מסיפריות התלת, (כפי שאתה רואה התקסטורה נחתכת במדוייק) כאשר כל מה שצריך מבחינת ה VIEW זה לחתוך BITMAPDATA בעזרת 4 שורות קוד. לכן הייתי שומר פה על עיקרון ה KISS כלומר Keep It Simple and Stupid.
רונן צמיר
 
הודעות: 404
הצטרף: 13 מרץ 2010, 21:57
מיקום: חולון -> הרצליה פיתוח

Re: לחתוך BITMAPDATA הנחצה על ידי קו אחד

הודעהעל ידי sasmaster ב 24 אוקטובר 2010, 12:01

רונן צמיר כתב:תרשה לי לא הסכים איתך. (זה כניראה קורה לנו הרבה :פרח: )

.


רונן אתה לא היחיד , אני גם נהנה לא להסכים עם CONDOR בנושאים רבים ;)

PS
CONDOR -הכל ברוח טובה כן ? ....
"This looks like a job for superman"

סמל אישי של המשתמש
sasmaster
 
הודעות: 436
הצטרף: 14 מרץ 2010, 13:58
מיקום: Rechovot

Re: לחתוך BITMAPDATA הנחצה על ידי קו אחד

הודעהעל ידי IAP ב 24 אוקטובר 2010, 14:42

ברור :פרח:
תמיד אומרים לי שיש לי דרכים.... שונות מהנורמה. בד"כ זה עובד לי ;)

בכל אופן, במקרה של המשחק זה אכן נראה כמו חלק מהטקסטורה, עם תוספות. אין שם ספריות תלת מימד, אגב, רק מנוע פיזיקלי כמו APE או Box2D.
סמל אישי של המשתמש
IAP
 
הודעות: 554
הצטרף: 15 מרץ 2010, 21:27

Re: לחתוך BITMAPDATA הנחצה על ידי קו אחד

הודעהעל ידי pseudoDust ב 29 אוקטובר 2010, 04:33

if you're not trying to do what is done in the game, which will - as previously stated - require you to keep the geometry of the object anyway; that is, if you just want to get two BitmapData objects of the two parts, a simple and fast solution can be to use pixelBender.
i was board so i wrote the kernel:

Syntax: [ Download ] [ Hide ]
Using pixelbender Syntax Highlighting
<languageVersion : 1.0;>

kernel ImageSplitter
<   namespace : "ImageSplitter";
    vendor : "pseudoDust";
    version : 1;
    description : "gets only the pixels above or below a line";
>
#define DEBUG 1
{
    parameter float2 p1
    <minValue:float2(0,0);
     maxValue:float2(300,300);
     defaultValue:float2(100,100);>;
    parameter float2 p2
    <minValue:float2(0,0);
     maxValue:float2(300,300);
     defaultValue:float2(200,200);>;
    parameter bool top;

    input image4 src;
    output pixel4 dst;

    void
    evaluatePixel()
    {
        float2 coord = outCoord();
        float side = (p2.x - p1.x) * (coord.y - p1.y) - (p2.y - p1.y) * (coord.x - p1.x);
        dst = ((side<0.0)==top)?sampleNearest(src,coord):pixel4(0,0,0,0);
        #if DEBUG
            dst = (distance(coord,p1)<3.0 || distance(coord,p2)<3.0)?pixel4(0,1,0,1):dst;
        #endif
    }
}
Parsed in 0.010 seconds, using GeSHi 1.0.8.4

just remember to set DEBUG to 0
pseudoDust
 
הודעות: 25
הצטרף: 14 מרץ 2010, 23:12


חזור אל אלגוריתמיקה וקוד מתקדם

 


  • שרשורים בנושאים דומים
    תגובות
    צפיות
    הודעה אחרונה

מי מחובר

משתמשים הגולשים בפורום זה: אין משתמשים רשומים ואורח אחד